I once wrote a liblinux library for Linux software development with freestading C. One of the things I did was replace the "main" function with a "liblinux_start" function.
Standard C stops you. The C standard library is hardcoded to call the main function. Providing one's own ELF entry point also breaks libc initialization unless the exact same startfiles are used.
Freestanding C gets rid of the libc so that's not a problem.