The abstraction does not help the individual to learn how the machine works though.
To breed a new generation of actual technically interested kids who understand the lower levels of the machine and how the high level OOP abstractions actually execute on the hardware, I honestly believe you have to start at the other end.
I feel all of my knowledge of creating efficient solutions to problems stems from having learned BASIC, got dragged into assembler through that, back up into C, onto C++ and OOP, then into Java and dynamic languages like Lua.
Doing it the other way around seems to feel somewhat backwards to me, although I would certainly take the point that today's optimizing compilers are incredible, and the ability of high-level languages to create very efficient code in a relatively small amount of code are incredible. Maybe my desire to understand what goes on underneath leads me to program in particular ways that are not always suitable to high level and functional languages?