arg="foo" (function(...) print(arg) end)(1)
--> table
not:
--> table: 0x....
The internal pointer (or any unique identifier of the function or debugging info) is concealed: with tostring(function()end), we just know the type='function' and nothing else (we can't even get the function's environment or get a function name).
The only available feature is calling debug.traceback (where all tracing info coming from outside the public modules loaded by Scribunto are hidden, instead we get the internal name of the accessible modules or exported function names, and line numbers in the modules themselves; we never have any info from the C runtime, we just know that there's some C function used at the bottom of the traced call stack, and tracing stops there; in addition, calling debug.traceback() generates an error that terminates the script and clears all existing outputs)
That version 5.1 exposes limited capabilities, but Lua 5.1 is not so "obsolete" (because it is supported specifically but only for these restricted and secured capabilities), it is still used on a VERY LARGE scale; it is the most widely used version, running for hundreds of sites (possibly more), totaling billions of active visitors (most Internet users of the world) and indirectly accessible via bots indexing their contents to present it on search engines or third party sites.
That version 5.1, whose documentation is maintained and published along with the documentation of Scribunto itself (including the description of the very few supported libraries, and their modifications or additions) has support for "..." but still exposes the implicitly declared "arg" local variable in function bodies (which hides any external variable of the same name).
Lua 5.2, 5.3 or 5.4 are still not supported (for now), their security and stability has not been deeply evaluated, or there's a compatibility issue to port it for its safe integration in a securely restricted PHP environment.