The hosts fell behind just before the break when Sergio Ramos used his hand to block a shot in the box and Bruno Soriano chipped in from the spot.
Ramos made amends soon after the restart, heading in from a corner.
Zinedine Zidane's side put the visitors under concerted pressure throughout the second half, but Villarreal held on to deny Real the outright record.
Instead they will have to share the record of 16 straight wins set by Pep Guardiola's Barcelona side in the 2010-11 season.
However a point ensures they remain top of La Liga, four points ahead of Barcelona, who could only draw 1-1 with Atletico Madrid.
Not many players switch between the roles of hero and villain as easily as Sergio Ramos and the volatile defender once again played both parts expertly either side of the interval.
For the second game in a row he tried to disguise a handball by pretending the ball had hit his face. But the referee was having none of it and Bruno outsmarted Real keeper Kiko Casilla with a Panenka-style penalty to give Villarreal the lead. Ramos did the same against Espanyol at the weekend.
It is the third penalty that Ramos has conceded in seven games across all competitions this season, yet the Spaniard made amends, losing his man at a corner and producing a powerful header that gave Sergio Asenjo no chance.
It was the only one of 17 corners that the hosts converted, with Ramos also unable to persuade the referee to award Real a late penalty as he fell under the challenge of Roberto Soriano.
This was the first game in which Real's 'BBC' front line of Gareth Bale, Karim Benzema and Cristiano Ronaldo have all started together - a result of both injury and Zidane's commitment to rotating his squad.
Yet there were only flickers of the trio's best football, especially in the first half when a resolute Villarreal stopped Real's fluid passing game and forced them to resort to shots from distance.
The hosts dominated for long spells of the second half but rarely forced Asenjo into a save, with Benzema guilty of heading over two chances when well placed before both he and Bale were substituted before the end.
A night of frustration for Real's talisman Ronaldo was complete when he finally found the target, only to see his effort parried away by Asenjo before slamming a late free-kick straight at the Villarreal keeper.
Match ends, Real Madrid 1, Villarreal 1.
Daniel Carvajal (Real Madrid) is shown the yellow card.
Second Half ends, Real Madrid 1, Villarreal 1.
Attempt saved. Cristiano Ronaldo (Real Madrid) right footed shot from outside the box is saved in the centre of the goal.
Cristiano Ronaldo (Real Madrid) wins a free kick in the attacking half.
Foul by Alfred N'Diaye (Villarreal).
Foul by Raphael Varane (Real Madrid).
Alexandre Pato (Villarreal) wins a free kick in the defensive half.
Sergio Ramos (Real Madrid) wins a free kick in the defensive half.
Foul by Alfred N'Diaye (Villarreal).
Foul by Lucas Vázquez (Real Madrid).
Manu Trigueros (Villarreal) wins a free kick in the attacking half.
Attempt saved. Cristiano Ronaldo (Real Madrid) right footed shot from the centre of the box is saved in the top right corner. Assisted by Daniel Carvajal.
Substitution, Villarreal. Alfred N'Diaye replaces Jonathan dos Santos.
Attempt saved. Toni Kroos (Real Madrid) left footed shot from outside the box is saved in the centre of the goal. Assisted by Lucas Vázquez.
Corner,  Real Madrid. Conceded by Víctor Ruiz.
Attempt blocked. Lucas Vázquez (Real Madrid) right footed shot from the centre of the box is blocked. Assisted by Cristiano Ronaldo.
Corner,  Real Madrid. Conceded by Sergio Asenjo.
Attempt saved. Álvaro Morata (Real Madrid) header from the centre of the box is saved in the top centre of the goal. Assisted by Lucas Vázquez with a cross.
Foul by Cristiano Ronaldo (Real Madrid).
Mateo Musacchio (Villarreal) wins a free kick in the defensive half.
Foul by Lucas Vázquez (Real Madrid).
Alexandre Pato (Villarreal) wins a free kick on the left wing.
Attempt saved. Toni Kroos (Real Madrid) right footed shot from outside the box is saved in the centre of the goal. Assisted by Daniel Carvajal.
Mateo Kovacic (Real Madrid) wins a free kick in the defensive half.
Foul by Jonathan dos Santos (Villarreal).
Corner,  Villarreal. Conceded by Toni Kroos.
Attempt blocked. Mario (Villarreal) right footed shot from the right side of the box is blocked. Assisted by Samu Castillejo.
Substitution, Real Madrid. Álvaro Morata replaces Karim Benzema.
Attempt missed. Karim Benzema (Real Madrid) header from the centre of the box is high and wide to the left. Assisted by Toni Kroos with a cross.
Corner,  Real Madrid. Conceded by Mateo Musacchio.
Attempt blocked. Cristiano Ronaldo (Real Madrid) right footed shot from outside the box is blocked.
Toni Kroos (Real Madrid) is shown the yellow card for a bad foul.
Foul by Toni Kroos (Real Madrid).
Samu Castillejo (Villarreal) wins a free kick in the defensive half.
Substitution, Villarreal. Alexandre Pato replaces Nicola Sansone.
Substitution, Real Madrid. Lucas Vázquez replaces Gareth Bale.
Cristiano Ronaldo (Real Madrid) is shown the yellow card for a bad foul.
Foul by Cristiano Ronaldo (Real Madrid).
Bruno (Villarreal) wins a free kick in the attacking half.
Real Madrid missed out on a record-breaking 17th consecutive La Liga victory as they drew with Villarreal.