Ciprian Marica's early goal got Getafe off to the ideal start and their cause was further helped by a 39th-minute red card for defender Pablo Iniguez for a foul on Marica.
The Yellow Submarine regrouped and had chances to get back on level terms, but they were finally sunk two minutes into injury time when substitute Pablo Sarabia added a second.
The win moved Getafe, who have now won five of their last six in the league, to within a point of their opponents.
The away side came flying out of the blocks and might have gone in front in the third minute, but Borja Fernandez's header went wide of the left post.
Their goal came just two minutes later, though, as Marica's right-footed shot from the centre of the area found the bottom right corner.
Villarreal finally got going around the half-hour mark, with Giovani Dos Santos bringing a smart block out of goalkeeper Miguel Moya.
The keeper denied the Mexican again in similar fashion a minute later as the hosts tried in vain to level the match.
But the hosts were dealt another blow six minutes before the break when Iniguez received a straight red card for a foul on Marica.
Giovani looked their most likely source of sparking a fightback and his inswinging corner from the right 10 minutes into the second half picked out Tomas Pina, but his header went over.
At the other end Diego Castro tested Sergio Asenjo in the home goal, but Villarreal still had hopes of getting back into the match, Ikechukwu Uche firing a presentable chance over the top.
Sarabia's effort at the death killed them off, though, as he provided the finish to Pedro Leon's ball in from the right to seal a fine night for Getafe.