Monotonic versioning [0] seems to be a strictly better scheme; "semantic" versioning doesn't actually include meaning, just the opinions of the authors of code. A language's development environment could enforce the monotonic requirement.
That doesn't seem to allow any kind of update to old versions, the most notable of it is security patches for past versions. But also supporting multiple concurrent branches of development (such as angular 1/2, or mobx's 4 and 5 - both are set to be supported for quite some time after their version is updated).
[0] http://blog.appliedcompscilab.com/monotonic_versioning_manif...