Bjarne Stroustrup jumped in and gently chewed me out: "The Cfront compiler is not a preprocessor! It is a full-fledged compiler just like any other. Sure, it uses C as the compilation target right now, but it won't always be that way. It could generate native code, but compiling to C let us get up and running more quickly and on more hardware architectures than we could if we targeted machine code right away."
(Those weren't his exact words, but definitely the gist of it. Some things like this stick in your mind.)
If "compiler" was good enough for Bjarne, it's definitely good enough for me.
Now jumping ahead to the present, consider Kotlin. Its compiler can target JVM bytecode and JavaScript, and they're working on native support using LLVM for the final code generation pass.
Is Kotlin a transpiler when it targets JavaScript, and only a true compiler when it targets the JVM or native code?
It just seems like a silly distinction. Why bother having a separate name? A compiler is a compiler.