What exactly is hard about delegates and events? Delegates are just function pointers with static typing, events are just lists of delegates that are called when the event is fired from within it's parent class. If you can't understand this you should rethink your career direction.
>>3
Does that even matter? Your initial assertion was that it could've been more elegant with first class functions (the wording of this assumes that there aren't). It doesn't matter if the first class functions are enough, they're there. Thus, your initial assertion is wrong.
>>5
Technically delegates support multiple function pointers. When called these delegates will execute every attached method and return the result of the last one. I've never seen this used in practice and it is regarded as extremely bad style, as this is what events are there for.