One of the blogs I read (can't remember which) said a couple of weeks ago that almost all of the programming productivity gains we ascribe to OO are in fact due to memory management and reflection. The first stops average programmers from doing stupid things; the second allows good ones to do amazing things. Neither absolutely requires a VM, but all the languages that offer them these days are VM-based. (OK, so it's a stretch to call C# a VM-based language, but close enough.)

I was reminded of this while reading:

Kanglin Li and Mengqi Wu: Effective Software Test Automation. Sybex, 2004, 0782143202, 408 pages.

The tool this book describes uses run-time reflection to find callable methods in the code under test, .NET CodeDOM to generate testing code to call those methods, and Excel (yes, Excel) as a UI. The combination lets QA engineers enter tests in a spreadsheet, then click a button to make the tool generate the code to enact those tests. You could do this in C++ (or even in C), but the effort required would be so great that I doubt anyone would.