The .NET team could have gone ahead and allowed arbitrary expressions to be used as constants — e.g. new Vector2(0, 0) if the Vector2 constructor was known to have no external side effects and the type was known to be a struct or otherwise immutable. But they simply didn't take the time to do this, perhaps because figuring out these requirements is extra work for the compilers (remember, C# has no immutable or pure keywords yet).
The string type is special to the compiler and the runtime: it was designed from the start to be immutable and its constructors have no externally observable side-effects, so the creators of the .NET runtime baked this knowledge into the compiler. That's why string has literals and gets special treatment.
Still, they probably wanted to avoid teaching the infrastructure too many special types — just a handful of fundamental types, namely primitives and strings. DateTime simply wasn't deemed important enough to be included.