Anyway I'm not sure what I was thinking of when I wrote up that solution... but you can hack anything you want regarding positioning in CSS, it will just be inelegant.
For example, to achieve what we're talking about without styling it as a table, you could do this:
<div style="position:relative;">
<div style="position:absolute; left:0px; top:0px; height:100%;
width:50%; background:coral;"></div>
<div style="position:absolute; left:50%; top:0px; height:100%;
width:50%; background:skyblue;"></div>
<div style="float:left; position:relative; width:50%;">hello</div>
<div style="float:left; position:relative; width:50%;">hello<br/>goodbye</div>
<div style="clear:both;"></div>
</div>
The relative elements are determining the size of the parent element, while the absolute elements fit to the size of the parent element (for background colors).
What CSS should do, is that if you set 'height:auto;' to a parent element, and 'height:100%;' to child elements, is do what we're saying automatically. But there's no difference in CSS between height:auto; and leaving the height value empty, so it doesn't work that way.
Harlequin---
You can do what you want with stacking
<div style="height:200px;">
<div style="height:100%; background:coral;">robot</div>
<div style="height:50px; background:green;">robot</div>
<div style="height:100%; background:gold;">robot</div>
</div>
But there are a lot of bugs with it, and you're right generally that there are problems with vertical alignment. These aren't things to be fixed in HTML though but in CSS.