Cristiano Ronaldo scored his 33rd goal of the season in the 62nd minute, but Marcos Senna equalised with eight minutes remaining for struggling Villarreal.
Things got worse for Real as Sergio Ramos, making his 300th appearance, and Mesut Ozil were both red-carded in the closing moments while coach Jose Mourinho and assistant Rui Faria were sent to the stands.
Barcelona had defeated Granada 5-3 on Tuesday to keep their title hopes alive with superstar Lionel Messi taking his career club goals tally to a record 234.
Afterwards neither Mourinho nor any of his backroom staff came out to face the press while it was reported that Ronaldo left the pitch repeatedly shouting ‘we’ve been robbed’.
“Referees hurt us too much sometimes, but we must hold our heads high and move on. Every team would like to have a six point lead,” said Real’s Brazilian star Marcelo.
“You saw what happened and how many of us were sent off. We must do our job. We took one point and must continue working hard.
“There’s no pressure and any team would like to be where we are now. We’re fine. We didn’t win but we’re in good spirits.”
Villarreal had a number of chances to take the lead, the most notable when Iker Casillas saved well on 20 minutes after a Sergio Ramos slip allowed Nilmar to bear down on goal.
Mourinho made a tactical change in midfield on 28 minutes replacing Lass Diarra, who had picked up a yellow card, with Jose Callejon.
The home team then had a strong claim for a penalty turned down on 37 minutes when Alvaro Arbolea appeared to pull the shirt of Neymar at a corner.
The game was becoming increasingly scrappy when on 61 minutes Ronaldo and Ozil exchanged passes, the latter with a delightful back-flick, for the Portuguese to round Diego Lopez in the Villarreal goal and put Madrid ahead.
Madrid were now in control and four minutes later Javier Camunas had to make a goal-line clearence after Sami Khedira hooked the ball towards the net.
Villarreal did not look like equalising until Hamit Altintop fouled Joan Oriol on the edge of the area and Senna stepped up to convert the free-kick from 20 yards with eight minutes left.
In the aftermath of that decision, Mourinho was sent to the stands and then a minute later Sergio Ramos was dismissed for a second yellow card. It was his 14th red card as a Real Madrid player.
Ozil was then given his marching orders with a direct red for protesting.
Earlier, third-placed Valencia slumped to a 2-1 home defeat to Zaragoza with the rock-bottom club taking the three points despite finishing, like Real Madrid, with only nine players.
Pablo Hernandez put Valencia ahead, but two goals from Antonio Galdeano ‘Apono’ gave Zaragoza some hope of escaping relegation.
The victory was deserved for a Zaragoza team who had Pablo Alvarez sent off on 20 minutes for a foul on Aritz Aduriz while Franco Zuculini received his marching orders with three minutes remaining.
Levante battled back from a goal down to beat Real Sociedad 3-1 and move just three points behind Valencia.
Carlos Vela put Sociedad ahead after just five minutes, but Jose Barkero replied almost immediately from the penalty spot against his former club when Inigo Martinez tripped Morroccan Nabil El Zhar.
Arouna Kone then powered home a right footed shot just before the interval to give his side the lead.
Real Sociedad had midfielder Gorka Elustondo sent off on 57 minutes for a second yellow card before Xavi Torres stabbed home from close range in the last minute to wrap the game up.
Sporting Gijon lost 3-2 at home to Mallorca for whom Alvaro Gimenez got the winner with 13 minutes remaining.
Colombian forward Radamel Falcao grabbed two goals for Atletico Madrid to beat Athletic Bilbao 2-1. Falcao now has 19 league strikes this season.