Real were seeking a record 17th straight league win and indeed their fifth straight success this season, but Villarreal, who remain unbeaten, led late in the first half through a Bruno penalty, before Sergio Ramos equalised early in the second period.
Cristiano Ronaldo and Gareth Bale both returned to the Los Blancos XI after missing the win over Espanyol at the weekend, and it was the latter that threatened Villarreal in the opening 10 minutes with his pace and ability to carry possession.
The game's first attempt on target arrived in the 19th minute when Karim Benzema met a flick from Bale at the far post, but Villarreal stopper Sergio Asenjo was on hand to make a smart save after the Frenchman beat Mario Gaspar to the ball.
Bale and Ronaldo both had long-range attempts for Real Madrid in the latter stages of the first period, but neither tested Asenjo as the home side struggled to create clear chances.
Villarreal continued to threaten late in the first half, however, and the Yellow Submarine were awarded a penalty in the 45th minute when Ramos handled inside the box, which allowed Bruno to step forward and send the visitors into the lead.
Real Madrid were level in the early stages of the second period, however, when Ramos headed a James Rodriguez corner into the back of the net during what was a strong spell for the home side.
Los Blancos were absolutely dominant as they continued to put pressure on the Villarreal defence, and Ronaldo had a golden chance to send his team 2-1 ahead just past the hour, but the Portuguese could not stretch to meet a Dani Carvajal cross.
Bale was next to come close for Real Madrid in the 65th minute after a pick-out from Benzema, but the Welshman missed the far post and the former Tottenham Hotspur attacker was replaced by Lucas Vazquez five minutes later.
Asenjo then made another wonderful stop late on to keep out Vasquez, before denying Ronaldo in the final minute as Villarreal continued their unbeaten start to the season with a point.
Next up for Real Madrid, who remain top of La Liga, is a trip to in-form Las Palmas next Saturday evening, while Villarreal will look to return to winning ways when they host Osasuna next Sunday night.