It's not faster. It's only faster for specific use-case, running the same stuff for long time in a loop. This use-case is a good fit for running webapps, but not small scripts, hooks, mobile or desktop apps that trigger some (relatively) small amount of (different) work randomly (on user's activity).
To be fair, almost all longer running applications fall into the "same stuff for long time in a loop" category. Whether it's a GUI event loop, rendering, scientific computation, or a network server.
Sure, very small scripts and hooks only do one thing one time, but usually those aren't the things that benefit from being heavily optimized in the first place, and could just as well be left interpreted (even better -- as interpreted code is more compact and thus better fits in the cache). The same holds for every other JIT-based language.
Well, I'm actually not sure they do. I'd like very much to get some real-world example and experience to see. But until then, I don't think that clicking the same button >1000 times to make JIT work will be faster in real life.
Overall, PyPy lefts expression as project that "gets fantastic things done" and I'm looking forward using it everywhere I can.