I think the key question here is (based on usage above and that you’re considering 8 vs. 8 cores): how many hardware add-in cards do you plan to run?
X470 will handle multiple video cards just fine. x8 PCIe 3.0 is fast enough.
“light VM usage” - 32 GB is plenty, some may say 16 is enough but i think that’s tight. 64 GB is overkill for “light VM usage” and X470 can go that far.
So really all you’ll gain (that is relevant to your usage) from X399 is more cores, which you aren’t buying. And more PCIe which you may never use.
with the 1900 you will lose on memory latency, clock speed, IPC, no box cooler and higher power consumption vs. the 2700X.
X470 should likely see higher core count upgrades with Zen2 and onwards.
X399 will come into into its own if you’re thinking about M.2 RAID or possibly even adding additional PCIe connected SSDs. Or 10 GbE at the same time as doing 2x video cards.
But if you aren’t realistically doing that… X470 is plenty capable. And being the mainstream platform, any bugs are likely to be squashed more quickly as there are far more users of it.
The money you save vs. X399 and a threadripper cooler + X399 motherboard + possibly bigger PSU could go towards more memory, a bigger m.2 SSD or a higher spec video card.
You’re already going to be outperforming the 1900X in virtually all non-PCIe IO bound cases with the 2700X, the money saved ** for better peripherals or more/faster storage will be gravy.
edit:
** even if the motherboards are the same price and the CPUs are the same price (and last i checked they weren’t quite there, but now for me 1900x is no longer available locally), don’t forget the free box cooler with the 2700x. To make use of 4 channel memory you’d need 4 sticks for the 1900X as well… which may be more expensive than a dual channel dual-rank kit for the 2700x.
If you don’t stick in 4 sticks into X399, you’ll see constant memory access penalties from one of the dies (or possibly even single channel per die with penalty plus single channel when they need to talk cross-CCX for memory access). You definitely don’t want to run threadripper without 4 sticks due to the way the memory channels are wired.