I don't think you can get anything precise from icecast. Still imprecise, you can play with harbor's buffer: input.harbor(buffer=80.,...). A little less should be better actually, since other buffers come into play in the pipeline, before and after liquidsoap.
It's funny that you broadcast audio and video in such independant ways. Which tools do you use for video, don't they handle audio as well ? For better synchronization, you should wait for liquidsoap to support video :) or try to play with some voip technology interacting with liquidsoap via Jack (or RTP..) ? By the way, I stumbled on a fun project on the web: http://www.linux360.ro/~csdexter/blog/2008/03/radio-andromeda-refactoring-pa.html The guys have a radio, notably using liquidsoap, with a proper studio (they actually use the same cheap Behringer hardware as I recently bought) and they use voip software, probably to chat with their listeners. Also noticeable, the guy uses different compressions per spectrum-band. I'm wondering if we know the guy under a nickname.. PS regarding normalize vs. replay-gain: normalize, although imperfect, is still the only solution for adjusting the level of a continuously input stream -- as opposed to a file.