It can when you use LTO, but that tends to be very slow for large programs.
It is slow. Our (C++) project's MSVC release build ends with a glorious 2-minute run of link.exe with lto (/LTCG /O2) and aggressive inlining (/Ob3) enabled.
Limiting unit size in C++ helps with faster edit/compile/run cycles as well, which doesn't seem to be concern for C codebases in 21st century.
You hit most of the same issues (and some additional ones) when compiling the same code within one translation unit...