Я считаю, что причина, по которой типы значений не поддерживают наследование, связана с тем, как они представлены в памяти. Размер и, следовательно, данные, представленные типом значения, зависят от составляющих его полей. То есть, если ваш тип значения содержит int и строку, общий размер в 32-битной системе будет 8 или 4 (размер int) + 4 (размер указателя). Это означает, что типы значений, представленные в памяти, представляют собой блок байтов без дополнительной информации.
Теперь контрастируйте, что с типами классов все они имеют размер указателей, или 4 на 32-битных системах. Поскольку экземпляры типов классов являются указателями, они могут ссылаться на вещи, необходимые для наследования, такие как VMT (таблица виртуальных методов) и ссылку на информацию о родительских классах. Это то, что тип значения не может сделать, и, следовательно, почему типы значений не поддерживают наследование.