The x86 assembly or LLVM intermediate representation that comes out of most compiler is not very human readable, but I don't see anyone having any problem with it whatsoever. Readability of generated code was never the point of C using C as a back-end. The point is portability and tooling.
By the way /u/jjnoakes can suggest fancy languages and compilers, if only they can generate native code on obscure platforms (I guess, something other than x86 and ARM). Generating C code (even utterly unreadable C code) would solve his problem.
All things that require work if I cross compile, but all things I get for free if I generate C or C++.
I would prefer readable C or C++ as much as possible because it gives me debugability if the code generator goes wrong and it gives me an out if I want to move away from the language some day.
<sarcasm> Now this might require a little bit more work. </sarcasm>
This is why I think rust is a winner. I bet most rust code could be compiled to c++ very cleanly.
You get rust's compiler with all of the safety checks, and you get the platform support of C++.
It would be a dream.