Heh, speaking of linking individual functions, GHC Haskell has a flag to emit one object file per function and do that thing with a traditional linker.
It's horribly slow.
But it produces smaller binaries, I've got 2x smaller binaries on my projects with that option.