Вы могли бы сделать это, немного поиграв с окружением, хотя это может иметь последствия и не может быть напрямую перенесено в Lua 5.2:
-- main.lua
mainfunction = function() print"main function" end
menu = require"menu"
env=getfenv(menu.drawmenu) -- get the original environment
env=setmetatable(env,{__index=_G}) -- look up all variables not existing in that
-- environment in the global table _G
menu.drawmenu()
-- menu.lua
menu={}
menu.drawmenu=function()
print'drew menu'
mainfunction()
end
return menu