It is not just compatibility. You cannot load them into the memory with your system dynamic loader. You need to also ship ld-linux.so with the new version of glibc you have, if you were to distribute your program independently.
On Windows you don't need to ship a new binary loader. I can just ship Windows 10 UCRT DLL (which is the new libc of Windows) to Vista and my binaries will work. The binary loader isn't interlinked with the libc.
Windows doesn't even have a concept of a loader binary right? I think its hardcoded into the kernel/win32 itself.
Why? If you compile your program against an older glibc it will run on newer glibc. glibc is the loader.