Compiling to C(++) gives us C(++)'s portability and a dirty/better way to interop with C(++): features like `.emit`, `.header`, `.incompleteStruct`, `.codegenDecl` are harder to do with LLVM.
That said, C is a pretty bad compiler target language because it doesn't support precise stack tracing for GCs nor efficient exception handling. Thanks to its preprocessor you never know which identifiers might actually be unusable as object fields (`obj->unix` can fail to compile...). LLVM doesn't have these problems.
