Personally, barring any major JIT advances, I'm considering the book closed on the topic of whether JITs can take a dynamic language and make it as fast as C or C++.
It's possible to close more of the speed gap, but these JITs have to be able to:
* identify and use native primitives (avoid overflow and so forth)
* prefer stack allocation over heap (improved escape analysis)
* inline memory allocation and freeing and remove unused codepaths
* optimize across the boundary between implementation language and hosted language (which I believe requires self-hosting)