I guess I don't think IVs are the problem on their own. It's just the implementation that's the problem. They don't make pokemon unique. They make pokemon bad. They promote treating your pokemon in the exact opposite way that the game claims it wants you to. They go against the themes of friendship, loyalty, love, hard work, etc. and instead reinforce not caring about pokemon as individuals, and yeah, eugenics. And on top of that, they aren't fun to deal with. They only people who know they exist are the same people who try to eliminate their purpose.
The way IVs work can be summed up like this. Some pokemon are born worse than others, and there is nothing they can do about it. In order to keep IVs, but fix them, all we have to do is change part of that sentence. Some pokemon are born worse than others, but there is something they can do about it. In my mind, that fixes everything. Pokemon born with bad IVs should be able to train harder than other pokemon in order to be even/compete with them. Training harder=putting in more effort=more effort values. I think the way to fix IVs is to leave IVs the way they are, and instead change the way effort values work.
Pokemon with lower IVs should be allowed to gain a higher number of EVs in order to make up for the difference. Say I've got a pikachu with 31 speed IVs and another with 0 speed IVs. The pikachu with 31 needs to fight X number of battles in order to reach maximum EVs in speed. But the pikachu with 0 IVs needs to fight more battles because the game allows them to gain a higher number of EVs than the other pokemon. So by the time you're done training your pokemon, they will be of equal strength stat-wise, the the "weaker" pikachu had to work harder to get to that point. I don't know the calculations, so I don't know what the numbers would need to be, but I imagine it wouldn't be too hard for them to implement such a system. And I don't know how many more battles you'd have to fight, but between horde battles and power items, it would still take far less time than breeding.
And I think it's good because it fixes a lot of problems, and it works within the fiction as well. You're no longer breeding for hours and throwing away scraps, so it's better for the fiction, because instead of being a mad scientist treating pokemon like items and experiments, you actually act like a proper trainer. And it can be less time consuming and more fun than the current system. Especially if they also change the way EVs are gained. Super Training was a good start, but it's not really a great solution in practice. Instead, they should just look to the real world for the answer. I should be able to simply choose which aspect my pokemon is going to "train" at any given time, regardless of who I'm fighting. On the super training screen, there should be buttons for every stat, and I should just be able to tap one and say "Ok, today pikachu is training in Special Attack". And from then on, until that stat is maxed out or until I switch to another one, my pikachu will not gain any EVs in any other stat but Special Attack. Think about it. If I go to the gym, I don't gain muscles randomly. I specifically choose to work out my arms, or my legs, or I specifically choose to run. Would be nice if pokemon worked the same way. Metaphorically, it would work as well. "This is what pikachu and I are working on right now." Simple.
And they should encourage practicing for real, even if you don't have perfect EVs yet. As in, we should actually be able to gain stuff from playing online because 1.) that actually helps the people more as competitive players, and 2.) again, it works better with the fiction. Battling against real trainers makes you and your pokemon better. They could make it so you get a set number of EVs for the whole team if you win, and a lower set number of EVs if you lose, and a set number for each individual pokemon depending on their number of KOs. Just encourage people to play and experiment online. Two birds with one stone.
And as far as making each pokemon unique, well IVs were always a horrible way to do that, since people simply don't notice those things in casual play. I think a better way would be to actually make changes to how pokemon look/act. It might be difficult since there's 700+ pokemon, but I think a few simple tricks would work. First, they can change each pokemon's appearance based on a few variables within certain ranges. In the pokedex, it shows what the size of each pokemon is. Instead of being a static number, this should be a range. And when you catch a pokemon, it will randomly fall somewhere within that range, and if you compare it to another of the same species, you'll be able to tell that your friends Charizard is slightly smaller than yours. They should do the same thing with a pokemon's color as well. Yes, they already have shiny pokemon, and that's really good and really fun and should stay incredibly rare. But again, there could be a range within the same palette that each pokemon could fall into randomly. Using Charizard as an example again, my Charizard is a slightly, but noticeably darker orange than my friend's, and the skin on his wings falls more towards the lighter blue side than greenish blue. And each pokemon could have it's own unique animation when it comes out of its pokeball. Say each species has 3 different animations, and each individual gets one randomly. I assume all of this stuff would just be randomly calculated upon finding them in the wild or hatching them.
Personally, I think there's a lot they could do to make the entire experience better and fit more inline with their fiction. These ideas are just the tip of the iceberg.