Второй опубликованный вами метод будет работать, если в пользовательских данных уже есть метатаблица с таблицей, назначенной полю __index.Из соображений безопасности метатабельный объект нельзя присвоить пользовательским данным из Lua.Таким образом, вы должны присвоить userdata метатабельный из вашего кода привязки Java.
lua_newuserdata(L, SOME_SIZE);
luaL_newmetatable(L, "userData.mt");
lua_setmetatable(L, -2);
Если у метатаблицы еще нет таблицы __index, то создайте ее.
local mt = getmetatable(userData)
mt.__index = {
newMethod = function()
print('It works!')
end
}