> in Itanium's case at least partially because it was hard to write compilers good enough to exploit its VLIW design
This is half true. The other half is that OOO execution does all the pipelining a "good enough" compiler would do, except that dynamically at runtime, benefiting from just in time profiling information. Way back in the day OOO was considered too expensive, nowadays everybody uses it.