That's also my biggest problem with Lua.
Each Lua release breaks the compatibility with earlier versions. There are however some compatibility switches to enable removed functions but it does not save the functions whose signatures have completely changed. This break scripts everytime.
The same concern is applied for the C API, if I want to support different versions of Lua, I need to add a bunch of #if LUA_VERSION_NUM to fix the signatures.
It has some 'strange' things I can life with, like ~= instead of != or that the first value in a Array/Table is 1 and not 0, but the differences between the Lua Versions 5.1, 5.2 and 5.3 are really frustrating.
For me it is hard to understand why for example functions(log()) in the standard math.library are changing between the versions.
It is also a big problem that we have a separation between LuaJIT and Lua5.2 / Lua5.3.
Currently I am using 5.2 but I am thinking permanent to switch to LuaJIT so I have a more solid base.
I hope that 5.3 will be more stable.