Here's the thing: the show is basically set up on the notion that the protagonists fall for characters with evil pasts. When this happens of course said characters are either unable to harm others or choose not to.
But the fact remains that "I love you in spite of the horrible acts you used to commit" is a very big part of what the show Buffy the Vampire Slayer is all about. It starts off on a very palatable, simple level with Angel and Buffy, in season 1. It's "I love you despite who you used to be because you are almost literally a different person now." In seasons 2 and 3, this is heightened to "I have now discovered that you are never really very far away from the monster you were--in fact you were him just yesterday-- but I love you anyway, because I understand that you are still entirely different for all intents and purposes."
This is all heightened even further with Xanya: "You recently were a vengeance demon, (who is responsible for all of our deaths in an alternate universe), but you are now a human being who is attempting to make a go at a normal life, and I love you." Heightened further still with season 6 Spuffy: "You were a monster who was once my enemy who is now unable to do physical harm and is in love with me so I will enter into a physical relationship with you."
Season 7 Spuffy, (whether you believe Buffy truly loves Spike or not), comes full circle à la season 1 Bangel with the same foundation: "I love you in spite of who you used to be because you are almost literally a different person now."
So my point is: Xander is surely hypocritical when he judges Buffy negatively for loving Angel and Spike. But I don't agree with the sentiment that it is at all out of place in the context of the show for Xander to find Anya, a former killer, lovable. That's so much of what this show's about. Redemption, faith, love, second chances. It just is.