Withuot closures, Lua code would be much lessa efficient. Closures avoid lot of duplication of values and allows smaller and simpler stack frames, when most other values will be already in the parent environement (whose properties, alias "global variables" but this is an incorrect term as Lua has absolutely no static variables, all of them are embedded in a closure, the closures forming their own stack, independant of the call stack because function calls do not necessarily create a call stack frame, e.g. in trail calls, and do not necessarily create a closure, unless specifically instructed in the called function by explicit settings using fsetenv).
This offers the full flexibility and efficiency of Lua (the same also applies to _javascript_ that has the same mechanism and is based on exactly the same concepts, with in fact minor syntaxic differences, but with stronger semantic definitions and a more precise security model for access control).
So the good question is just how Lua and _javascript_/ECMAscript are differentiated: they are in fact very similar (except for their default library)