Oh you said it. I agree there are too many legendary Pokémon but Johto slander will not be tolerated rn sir. OK you got the best eeveelutions, probably the best legendary trio, ho-oh and Lugia are sick, CROBAT, Heracross Scizor repping bugs and you get the idea
The Johto dex isn't just hit-and-miss, it's hit-hard-and-miss-hard. There are many awesome 'mons, like those you listed, but especially until Gen IV Johto was filled with semi-useless Jokémon that were barely tolerable in in-game play. Sunflora, Ariados, Ledian, Noctowl, Mantine, Magcargo, Xatu, Aipom, Unown, Wobbuffet, Girafarig, Corsola, Delibird, Stantler, Yanma... the list of mediocre crapmons went on and on. Try playing Pokémon Colosseum to see for yourself. And even the starters are kind of boring and underwhelming these days, compared with most of what came after them.
It also didn't help that the good Johto 'mons were so dang hard to obtain, or arrived too late to be of use, in the original games. Scizor, Houndoom, Blissey, Porygon2, and Tyranitar were postgame. You actually had to choose between Scizor and Steelix, unless you knew the obscure fact that some Magnemite could hold Metal Coat. Pineco and Heracross were very rare in Headbutt trees. Skarmory came after all the Gyms but one, where it didn't have much use anyway. The same went for Phanpy, except in Crystal where it was a (very rare!) encounter in the second route of the game... and then only in the morning.
Luckily, later generations amended most of the flaws of Johto. But I still can't help but think of Gen II as the crapmon generation. Yes, there were honourable exceptions, but those were a pain to obtain if you could get them at all before all the fun was over.