It's an optimization for usability. Many more symbols occur as the heads of list forms than appear after #'. So, the common case is optimized for clarity and the relatively uncommon case requires two extra characters.
I completely disagree that it sucks. What sucks is having to remember not to have your variable names collide with your function names (or indeed any of the other namespaces in CL). Things that are usually used in different ways benefit from having separate namespaces.
https://github.com/eschulte/curry-compose-reader-macros
Functions are not second class citizens. They are privileged with their own namespace. That's a perk, not a penalty.
One notable form of composition in CL is method combination. Does any other language support something like that?