Wenn man sehen will, was rauskommt, wenn man dies _nicht_ macht, muss man sich einfach nur Java angucken. Da int und String oder MyVeryOwnClass keine gemeinsame Basisklasse oder Schnittstelle besitzen, ist es nicht möglich, diese der gleichen Methode als Parameter zu übergeben (es werden Überladungen für Object und jeden einzelnen primitiven Datentypen benötigt) und Generik lässt sich nicht auf primitive Datentypen anwenden.
Weiterhin können Objekte dieser Typen Methoden besitzen, wie ToString() oder die Operatorüberladungen.
Außerdem dürfte jede enum "ValueType" erweitern (/davon erben), wodurch (anders als mal wieder in Java) es nicht möglich ist, dass null einer solchen Variable zugewiesen werden kann. (Ich hoffe, dass ich mich im enum-Teil nicht irre.)
Mal abgesehen davon hast du bereits erwähnt: man will, wenn man objektorientiert arbeitet, mit Objekten arbeiten.
Auch wenn es ein wenig kleinkariert ist, allerdings denke ich, sollte man in C# von "Wertetypen", nicht von "integralen Typen" oder "primitiven Typen" sprechen, auch wenn diese Begriffe in anderen Sprachen für (fast) das Gleiche verwendet werden.