Thanks. It was indeed strange for nFileVersion to actually mean "nLastClientVer".
It's due to legacy reasons. The original Bitcoin client had one consistent version number for everything, including the client version, the wallet file version, network protocol version, etc. Over time, these have been separated because it doesn't make any sense to have one version number for everything as they aren't all tied to each other that strongly. However, because of this original versioning model, the wallet version number would increment for every new client version and this was reflected in the wallet file by updating the "version" record.
As the version number was separated from the client version number, it became necessary to have the wallet have its own actual version number. Unfortunately the "version" field could not be used for backwards compatibility reasons. It's old behavior of updating for every new client had to be maintained, so it effectively became an indicator for the highest versioned client that has opened that wallet file.
I guess the WalletFeature values correlate roughly with software versions. Why the ..99.. in the newer ones?
This is also due to legacy reasons. As I mentioned above, the wallet version number was tied to the client version number. The client version number for the development version of Bitcoin Core ends with 99, so wallet versions where the version number was bumped during development just followed the client version number and thus also ended with 99. The client and wallet version numbers are no longer tied together so we can use other version numbers. However the same convention may remain as it does obviously indicate which software version first introduced a feature.