Lopunny is viable ingame because most Pokemon are (see HTs comment).
If you want me to tell you why Lopunny is good, it has high speed, decent attack, and STAB Return like you stated hits hard ingame at high friendship.
But really to tell if a Pokemon is viable ingame, just make sure its fairly easy to level up (Lopunny is), easy to evolve (if it can), and it can learn a decent amount of attacking moves. I’m straying away from the subject at hand because it’s fairly unnecessary to ask if a Pokemon is viable ingame when almost all Pokemon are. Heck, they could even not fit the basic standards that a stated above (I beat a game with Umbreon on my team, and I’m using Eviolite Rhydon for the same purpose). A little note: overleveling does wonders.
If you like using Lopunny, then use it. Your reason you stated for using it is good too (the coverage options).
I hope this helps, and in the future keep in mind that ingame just use the Pokemon that you like and will fit your playstyle/team <3