If you want to compare Lua with other programming language, it would probably go like this: Lua is very similar to Scheme, but with less parentheses and with (associative) tables instead of lists. Both have lexical scoping (i.e. closures), are dynamically type-safe (i.e. variables do not have types but all values do), and are relatively easy to learn (i.e. just a few simple concepts). The types in Lua are Nil, Booleans, strings, numbers, tables, functions, coroutines and user objects. User objects can only be created from C/C++ and are used to implement user-defined types.
Lua is not object-oriented as-is, but provides mechanisms that allow the implementation of object systems in the language itself. Then again, the Lua scripts in Aquaria do not make use of that. I have seen people have problems understanding Lua because they tried to compare it to C++ and Java too much.
As far as the types of application-specific objects in Aquaria go, there are entities and nodes. There are functions that return a reference to one of these types. They return 0 (the number zero) to indicate that a requested object does not exist. A more natural choice would have been to make those functions return nil in that case, but that's how things are. I would recommend to not make any assumptions about the Lua type of references to valid objects. Just don't pass in a node reference where an entity reference is required, or vice versa.
For more information about Lua itself, I would recommend the
Lua Reference Manual or the book
Programming in Lua. Especially the latter is nice to read, quite unlike "The Programming Language C++" by Bjarne Stroustrup which I would not recommend to just anyone.