I wouldn't say bad practice, obviously not the best, but until an easier method comes along we are all stuck with this one.
I use it, I use it every 250ms, so 4 times a second i get the new values.
It doesn't talk to winamp directly, it uses the winapi (GetWindowtText) to return the title of winamp's window and after some string manipulation you get the song title.
One could write a dedicated winamp plugin (winamp dll) that eg interfaces to winamp with, I have seen them, girder has one, but it only sent an event every 1000ms (configured inside the winamp plugin), so your osd could be out by 1 second or so (me being a stickler for speedy updates i wasn't happy with that), and if girder crashed or exited then you had to restart winamp to get the plugin events working again.
EG's plugin is isolated, if winamp is running you get the values, if not then you don't, if eg stops / starts there is no need to restart winamp, you will get the value no matter what.