Luajit detects the kind of output file passed to the -b option, in this case .o, and writes the data accordingly. It's actually writing compiled architecture-specific object code here which can be linked into a static library. You can also pass it a .c or a .h extension to get c source or headers.
I think luac compiles to bytecode only.