Even ODS-1 on RSX-11D and RSX-11M, ancestors of VMS running on the PDP-11, could have cross-links, but you wouldn't want to.
What made this possible was the separation of low-level APIs for file creation and for entering a link in a directory. Given an existing file, you could add additional directory entries. See the .ENTER macro on page 4.14 of the I/O ops manual.
The swiss-army-knife program PIP exposed this as /EN, create directory entry. See page 2-15 of the utilities manual. From that page:
Tne ENTER command provides the facility to enter a synonym for a file
in a directory or directories, thus allowing the file to be accessed
by more than one name.
The code for manipulating directory entries was in the user-space File Control Services (FCS) library rather than in the file system proper (F11ACP). There was even a utility for sorting a directory, i.e., arranging the entries in alphabetical order. This seemed to be purely an aesthetic preference.
The file system did not implement a link count for a file. Therefore, deleting the file from any one of its directory entries left the rest of them dangling. Fortunately, there was a 'remove' operation (the reverse of 'enter') for you to mop up the mess you'd created.
What's this to do with VMS per the question? Well, the initial VMS file system was ODS-1 from RSX and IAS, with much of the utility code running in compatibility mode. So I'm pretty sure any VMS system running ODS-1 had the same (mis)feature. I'm almost as sure that ODS-2, which added named directories (ooh!) would have been the same.
One thing to note about VMS is that the average program did not deal with the file system level directly, but used Record Management Services (RMS) on top of the file system. I don't recall whether a bare 'enter' was exposed through RMS.
You used all this at your peril, however.
As to whether it was an inevitable development: here it is more like an accident from layering, in that it is the job of the file system to have files (identified by index entry, like inodes in other system) and the job of something else to manipulate directory entries.
(Caveat: much of this is from memory, so fine details of implementation might be incorrect).
purge file.ext /keep=3
to remove older versions. Otherwise, disks would have filled up, or your disk quota would have become exhausted, rather quickly :-)