I'm sorry, but you are in fact the one who is wrong.
Yes, everything past your first line is true, except that the byte code cannot be "directly" executed. Byte code is made up of instructions to an abstract Python interpreter, a virtual machine that is much the same on every architecture.
A JIT compiler, on the other hand, compiles code into machine language, which can be directly interpreted.
Overall, I agree with you that a better solution is to rewrite the slow parts in C++ or use numpy. I have never actually used PyPy myself because it doesn't hit a sweet spot for me - you don't get the full speedup of C++, but you don't get the portability of Python.