I have experience using Lua and LuaJIT.
Lua has a VM and bytecode interpreter. It is designed to be simple and clean and portable, and is quite decent and fast.
LuaJIT has its own VM and bytecode format, which is different. The bytecode is smaller and more portable. The VM is faster. This is all without JIT.
LuaJIT also has JIT, but that needn’t be used (and indeed cannot be used on most mobile devices).
Once you have built LuaJIT, using it is as simple as linking to its libraries instead of Lua’s. Because they are binary compatible, it’s a drop in replacement.