With Lua (and one of the reasons why it is so powerful!) you can pass as many parameters to a function as you like and return as many values as you like.
A few examples :
local xmin, ymin, zmin, xmax, ymax, zmax = GetObjectColBox( obj )
local sx, sy, sz = GetObjectScales( obj )
local x, y, z, xa, ya, za = GetObjectPosAng( obj )
One of the reasons that this is a good thing is that when it comes to performance the bottleneck for Lua is the calling overhead of the interface to C/C++ which is stack based so instead of calling multiple functions to return single values you can instead make a single call and get a bunch of them which reduces that overhead.
Also if you don't actually want all the values, for example maybe we only want the Y scale value for an object, simply replace the ones you don't want with '_' , e.g:
local _, sy = GetObjectScales( obj )
Notice we don't need to specify the '_' for trailing parameters they are discarded by default.
The default way of specifying directional elements in 3D engines is the vector, I added the Rotate3D function to utillib to make it easy to convert between the Euler angle rotational format and vector format. If you specify the x,y,z components in the 0,0,1 format or 1,0,0 or 0,-1,0 then the resulting values you get will be a normalised vector which is what is used in things like light mapping, physics etc.
I strongly suggest getting yourself a good book on math for 3D engines.
Been there, done that, got all the T-Shirts!