Ответ 1
Вы не можете.
Из manual:
Предоставляется тип userdata, позволяющий хранить произвольные данные C в переменных Lua. Значение userdata является указателем на блок необработанной памяти. [...] Пользовательские данные не имеют предопределенных операций в Lua, за исключением назначения и проверки подлинности.
Как указано @Eric, единственное, что вы можете сделать из Lua, - это проверить метатебель:
print(inspect(getmetatable(someuserdata)))
Если вы используете C API, вы должны иметь возможность зарегистрировать настраиваемую функцию, которая печатает все, что удерживается блоком.