Static class is a simple convenient method to enforce the absence of any non-static members. If you try to add any non-static member, and the class itself remains static, you get a error message. Also, inheritance is not allowed for the static class. So, it answers partially your question: this is, by far, not the same as preventing instantiation of a class, this is something else.
Also note that what you describe, adding a private parameteless (important!) constructor, is done just to remove the effect of having the default constructor). Naturally, you would not add any other constructors: adding a private one would make no sense, and adding any non-private one would allow instantiation.
Now, is this syntactic feature really needed for the functionality? Of course not. Everything would work without it. So what? Everything could work without properties, templates, access modifiers,
using
statement… and a lot more. You need to understand that many features in language are good for: fool-proof behavior of the compiler, better compiler diagnostics, convenience, maintenance, expressive capabilities, readability, and so on. See also:
Syntactic sugar — Wikipedia, the free encyclopedia.
Please understand: your question of the type "why having this and that in the design?" maybe not really productive if it allows the answer in the "why not?" style. :-)
—SA