После некоторых исследований и некоторых RTFS я решил эту проблему. Я лаю совсем не на том дереве.
Несмотря на то, что в справочнике Lua API говорится, что longjmp используется для обработки ошибок, буфер longjmp вообще не предоставляется через API.
Чтобы поймать ошибку в функции Lua, вам нужно использовать lua_pcall (). Мой пример кода можно переписать так, и это работает:
lua_getfield(L, LUA_GLOBALSINDEX, "myfunction");
if(0 != lua_pcall(L, 0, 0, 0))
printf("Lua error: %s\n", lua_tostring(L, -1));
else
printf("Lua code ran OK.\n");