Your logic is badly, badly flawed. You start from the point where there should not be any essential difference by definition, and then, based on that, draw a conclusion that there is no difference.
If you still did not get it, I'll explained on another example. This is like considering a microscope as a device for hammering in nails, but with a number of part of unknown purpose. This is your starting point in first place. Then you take it, hammer a nail, and conclude that if functions the same way as the hummer, and the unknown parts are not utilized in the process, so a question should be raised, "aren't they useless?"… This is exactly what you have done.
Actually, the delegate is one of the implementations of a very deep conception:
methods as first-class objects. A delegate is an object, and unlike a method, its instance can be passed as a method argument or the type member reference, a property or a field. This way, this is another device of abstraction, along with, say, method parameter-passing or variable. This is how it explained in Wikipedia:
https://en.wikipedia.org/wiki/Delegation_%28programming%29[
^],
First-class citizen — Wikipedia, the free encyclopedia[
^].
I cannot blame you much in not understanding .NET delegates, specifically. Not many developers understand their full capacity. Unfortunately, this is because MSDN documentation, comprehensive in most parts, leave a lot of mystery about delegates and delegate instances; its help pages on the topic are closer to some cook-book recipes and leave important functionality, forget the mechanism, behind the scene.
Big part of it is described in one section of my article:
Dynamic Method Dispather, 4.1. On the Nature of Delegate Instance.
—SA