The problem is walking a few fine lines - one if flexibility vs. performance, and one is backwards compatibility.
Because we have, ever since 3.8 was released a couple years ago, created variants as child products - it would be very difficult and hazardous to change the way that works now, architecturally. Doing this allows for a high degree of flexibility on how end users utilize, modify and customize variations.
What we're working on is figuring out a way to have variations created in a more performant manner. We have a general ticket for this on our code tracker, it's definitely something on our minds that we're working on making incremental improvements for - the 3.8.9 release should have some significant enhancements in this department.