Not that I've actually looked at the code or anything, but off the top of my head I would think that if you used a frameset you could have the frame showing the chat listing with an autorefresh and have a bottom frame where the user entered text. Possibly add a third frame that gets autorefreshed and as necessary the server could rewrite that page with an onLoad in the body or an embed or some such that plays a sounds.
I do not, however, have any particular thoughts of getting around the caching that the server does. Seems to me that's the big stumbling block for any sort of notifications, etc.