Modern engines generate machine code.
With WebGL you can make games with PS1 like computations with PS3 like shaders on top. That’s plenty of power, if you ask me.
Regular Canvas is similar to Flash. We’ll see some hardware acceleration in the future though.
Also, both (i.e. Canvas and WebGL) will get faster once some bottlenecks are removed. The compositing currently takes a big chunk of CPU cycles for no good reason. This will get fixed.
WebGL does work fine on modern handsets.
HTML5 in Firefox: WebGL Demo On the Nokia N900 (YouTube)
Android handsets will be fine, too. They support OpenGL ES 2.0 and the V8 JS engine (the one Chrome uses) works there as well. Oddly enough the JS engine is just like the most powerful one on the desktop, whereas the Java VM is pretty crippled (they intend to speed it up a bit though) compared to those you know from desktops.
It’s sorta unfair, but as things are, JavaScript is in pretty good shape on those weak devices.