The champions were without captain Sergio Ramos and star striker Karim Benzema due to injury but were in front after just 107 seconds through Mariano Diaz, back in the line-up for the first time in 18 months.
Mariano's previous start in May 2019 had seen him score twice in a victory over Villarreal, yet his goal - which angered Unai Emery and his players amid confusion over a potential offside - proved only enough for a point this time.
Thibaut Courtois felled Samuel Chukwueze and, after a number of close calls for a defence evidently missing Ramos, Gerard Moreno tucked away the resulting penalty to equalise, keeping Madrid fourth following their humbling at Valencia prior to the international break.
Mariano at least made the most of a rare opportunity, although his contentious opener came after the linesman briefly raised his flag in error, seemingly believing the offside Lucas Vazquez was set to collect Dani Carvajal's pass.
The right-back instead himself seized on the loose ball and crossed for Mariano to head in, prompting unsuccessful appeals from furious home defenders.
Villarreal held their line well thereafter to halt Madrid's subsequent first-half attacks, but Dani Parejo could not capitalise at the other end as he nodded over after finding space where Ramos might typically be stationed.
And that wastefulness continued into the second half. Moreno dragged a shot across the face of goal following a poor Toni Kroos pass, before Parejo blazed wide.
However, Courtois - underworked despite the hosts' openings - raced from his line and took down Chukwueze, allowing Moreno to pick out the bottom-left corner 14 minutes from time.
What does it mean? Madrid pressure persists
"This is Real Madrid," Zinedine Zidane said on Friday. "We know the situation, we know all about it; every time we play we can't fail." The coach did not shy away from a question about the pressure mounting in the capital due to a testing start to the season.
A breakthrough Champions League win at home to Inter was supposed to get Madrid back on track on November 3, but they subsequently went down 4-1 at Valencia. Now, Moreno's equaliser here ensured there is again no respite ahead of a vital return fixture against the Nerazzurri at San Siro.
Madrid break emergency glass
Mariano does not see much action at Madrid, where Benzema is the undoubted first choice. But with the number nine ruled out on the eve of Saturday's game and Luka Jovic missing due to COVID-19, Zidane recalled his fringe man and was immediately rewarded.
The striker scored in a Clasico win against Barcelona last season, yet that had been his only goal from eight shots in a mere 56 league minutes since his two-goal salvo on his previous start. Mariano played 85 minutes on Saturday and netted with his only shot while creating two chances for others, proving an effective emergency option.
He was caught offside four times but not when it mattered most.
11 - Mariano Díaz has scored 11 goals from 22 shots on target for Real Madrid in all competitions, scoring a goal every 90 minutes played on average. Instinct. pic.twitter.com/R6TOdNnq1v— OptaJose (@OptaJose) November 21, 2020
Duo's goalkeeping gaffes
Sergio Asenjo faced only one shot on target. Unfortunately, he made no attempt to save that sole effort, instead already looking towards the linesman as Mariano stooped to nod into the net. It was an episode the overeager official might too hope to forget, but this was Asenjo's error.
Crucially, however, it was a similar story at the other end. Having watched Villarreal fail to trouble the target with any of their prior eight attempts, Courtois made the mistake of unnecessarily involving himself in play, costing his side two points.
Madrid visit Inter on Wednesday in a huge game for both sides. Villarreal are at Maccabi Tel Aviv a day later in the Europa League.