You can read the full details of haslayout in the ultimate reference here where its is explained fully. In short elements in IE that don't have haslayout are not responsible for their or their children's boundaries and was a mechanism to help speed the page up apparently. The net result was that IE6 especially was a very buggy browser and these elements without haslayout were unreliable in action.
zoom is just a haslayout trigger but is proprietary IE code (non valid) but will do no harm. You could use a dimension such as the height:1% hack instead but there is a danger in using the height:1% when you don't have control over other styles. If for example the element was overflow:hidden then the height:1% may clip the content.
(The height:1% hack works because IE6 treats height as if it were almost min-height and will expand a container to match its contents.)
The zoom hack is much safer because it has no impact on the element and doesn't care what other properties are around. Zoom will actually zoom an element and if you used zoom:2.0 the element would be zoomed to twice the size. Zoom:1.0 has no effect because that's the size it is already.
Read the link above for a more thorough description
Couldn't they just have put a conditional comment in there, something like
Yes they could but it would need to be in style tags.
<!--[if lte IE 7]> <style type="text/css">