Actually, 'U' would be more appropriate at powerup, for uninitialised. But this all goes back to the origional intention of the language - it was meant for simulation of analogue logic circuits. Hence all the extra values. Synthesis came along way after the language. On real hardware, if a memory hasnt been initialised, you'll actually find its all '1's and '0's. On FPGAs the only appropriate values are '1' and '0', with 'Z' for tristate outputs only. 'L', 'H', and other values can be used in code, and will be synthesised accordingly into the most appropriate logic, but on the actually hardware, all yoou get is '0' and '1', hence possible simulation synthesis missmatches.