The "it has a JIT" answer is technically correct but insufficient. PyPy run as Python code, by a Python interpreter, can JIT compile the Python code it interpretes (in fact, the JIT tests are often run this way) but is still awfully slow (it can take minutes to just start interpreting).
The missing piece, which predates the JIT and is actually required for the JIT, is writing the interpreter in a restricted subset of Python (called RPython) and then compiling it to C code. This way, you get an program which runs at roughly the level of abstraction of C (despite being written as a higher level of abstraction). This interpreter has historically been, and AFAIK still is, somewhat slower than CPython, but not several orders of magnitude slower (as an interpreted interpreter would be).
Your comment about "compiling directly to assembly" betrays confusion. Assembly code is not automatically faster than C code -- in fact you'd be hard-pressed to beat today's C compilers at generating assembly code, and C code is much easier to write and/or generate, even without getting into the whole portability mess. The problem isn't turning Python into C or assembly (take a look at Nuitka), the problem is paraphrasing the program in a more efficient manner without affecting semantics. Going straight for assembly does not solve any of the hard problems with that, makes the comparatively easy problem of generating code for the more efficient program harder, and very rarely allows any optimizations you can't also express in C.
Now, PyPy's JIT does generate machine code, but the PyPy executable is compiled from C code by a C compiler. The PyPy developers would be idiots if they attempted to compete with existing C compilers on even a single platform, let alone multiple platforms. Luckily, they aren't idiots and know that. The reasons for letting the JIT generate assembly code are different and much better (for starters, in the context of a JIT there are several optimizations you can't do in C).
By the way, most of what I wrote above is also stated in the answers to the question you link to.