Когда ты работаешь с Lua-машиной через C API, то взаимодействуешь с ней по «стековой модели».
Однако с точки зрения байт-кода у тебя кадр каждой функции фиксированного размера, и все «слоты» в нем – не что иное, как виртуальные регистры, с содержимым которых байт-код и работает. А в самой системе инструкций даже нет таких байт-кодов для операций push и pop.
...да и сами инструкции задизайнены так, что не умеют неявно брать операнды со стека (сравни, например, с байт-кодом JVM).