If that's possible, why should not binaries be small (without too many downsides, eg execution speed) by default?
Additionally, most compilers produce something that's useful for development and debugging by default, and that means including extra stuff for that purpose.
That Rust hello world is just hand-crafted to never be linkable to anything else at runtime and invoke a system call with a buffer. This isn't really how we'd like to do most things.
For example, an assembly program that just calls write and then exits is much smaller than even an unlinked version of it that uses printf, because the ELF binary doesn't need to contain information for the linker.
(The program I linked is an example of exactly what you're talking about)