There are very few great villains in videogames.
There are lots of great boss battles, sure, but a boss battle and a villain aren't the same thing. The blurry nature of this distinction, and the consistent confusion of one for the other that often results, is a root cause of videogames' struggle to create enduring, resonant narratives.
Simply put, there are certain things a great villain does within the course of a narrative that are A) structural in nature and B) counter to the core ambitions of great gameplay. To cater to one is, in many cases, to shortchange the other, and vice versa. Consider the stuff a great villain has to do in order to earn his villainous stripes:
Be Onscreen - Villains get problematic right here. Ask most players what their reaction is to seeing an enemy - let alone the enemy - onscreen, and their reaction is almost invariably "shoot it." If your villain gets attacked as soon as he appears onscreen, then he doesn't have a lot of time to establish his villainy. If the player can't shoot him or otherwise has their interaction with the villain hamstrung (Hello, forced failure conditions!), then they're going to be frustrated, and hate the game designer instead of the villain. Conversely, if you keep your villain offscreen so that he doesn't get his giblets pierced with a rocket-propelled grenade, then there's minimal chance for the player to build a (negative) emotional bond to the character. A villain who's offscreen until the final act isn't a villain, he's a plot device, and beating him resonates technically but not emotionally.
Do Villainous Things - A villain must establish his villainy. Generally, villains do this by doing villainous things where the player can see them (and please, enough with the "shooting his own henchman to show how evil he is" - it's been done), but that presents logistical problems to game designers. If the villain is being villainous where the player can see him, odds are that the player is going to try to stop him. If the player succeeds, your villain's evil cred has been reduced. If the player fails, it's probably because of a forced failure scenario, which raises player frustration. And if the villainy is cut scene only, then you've neatly snipped the interactivity that drives gameplay out of the equation. Too much of that (Japanese RPGs excepted, for obvious reasons) and you end up with a movie, not a game, and an unsatisfying player experience.
Be A Character - A good villain isn't just a disposable opponent for the protagonist. To be truly memorable, a villain has to have a personality and legitimate motivations that lend heft and credence to their evil plan. Consider Magneto: Yeah, he wants to wipe all of us normal human types off the face of the planet, but, hey, he's got a reason and you have to admire the guy's persistence. He's a genuine personality that the protagonists and audience can engage with on a level deeper than just punch combos, and that's why he has endured as a villain for nearly half a century. Unfortunately, building a villain as a character often requires exposition, and poorly handled exposition is the death of gameplay. James Bond may have to listen while the villain explains his master plan, but that's because he's been duct-taped to a crocodile that's suspended over a pit full of angry piranha-Boston Terrier hybrids. The player, however, is under no such constraints, and can simply switch games to escape the expository peril.