Why not compile directly to BEAM bytecode?
This approach also makes keeping your language up to date with the BEAM easier. If you implement against the byte code directly and the byte code changes then you have to make big changes in your compiler. By emitting Erlang terms you can make direct usage of the Erlang compiler (which should be more stable) in a later compilation stage. It's a similar situation for the LLVM and why they suggest you output LLVM IR and not bitcode.
Elixir compiles to Erlang, LFE compiles to Core Erlang, which is an intermediate form used by the Erlang compiler.