From a coding perspective attributes make things more complex 🙂 That's the cheap answer.
In general I also don't like it. Not because of virtual products (we don't really use this), but in case of product packs. I seriously ended up to save all my packs as normal products and handle the stock by an own module.
But that is something I would like to be changed in the core. It should be possible to use attributes on virtual products and packs. But as you notice, I use a lot of "would like" and "should". If there is not a owner of tb or a new fork, it will never come...