I think it's more than an implementation detail. With an intermediate step of source code compiling & linking, there is a mechanical process that checks for well-formedness that would otherwise be skipped. This is especially important if you're editing a large codebase and not one-shotting something from scratch.

There are also times when you want the final product to be able to target different architectures and platforms. Generating into a higher level language allows for re-targeting the code with only changing a few compiler and linker flags. I would much rather that than hoping the LLM is feature- (and bug-)compatible between generation runs.