Pep Guardiola’s side looked to be cruising after substitute Bojan Krkic, who replaced the injured Pedro, put Barca ahead in the 30th minute at the Sanchez Pizjuan.
However, after Alvaro Negredo held off two defenders and crossed for Jesus Navas to nod in the equaliser four minutes after halftime the match burst into life, with both sides coming desperately close to snatching a winner.
Real continued their perfect home record on Saturday when Karim Benzema netted twice in a 2-0 home win over Hercules and with 10 matches remaining champions Barca have 75 points to Real’s 70.
Villarreal missed a chance to trim the gap to third-placed Valencia to one point when they conceded a late penalty to gift nine-man Sporting Gijon a 1-1 draw earlier on Sunday.
Giuseppe Rossi had put Villarreal ahead in the 29th minute at the Madrigal when the United States-born Italy striker reacted quicker than his marker to sweep a loose ball in off the post, his 15th of the campaign.
The club were closing in on only a second win in their last seven league games when Gijon defender Jose Angel Valdes earned a second yellow card and captain Rafael Sastre was shown a straight red for bringing Rossi down in the 90th. However, when David Barral went down in the penalty area in added time the referee pointed to the spot and Diego Castro scored with an audacious chip into the centre of the goal.
Villarreal have 51 points from 28 matches, three behind Valencia, who held on to Spain’s third automatic Champions League qualification berth despite crashing to a 4-0 defeat at Real Zaragoza on Saturday.
In other matches on Sunday, European hopefuls Espanyol ended a run of six defeats in their last seven matches when they beat 10-man Deportivo Coruna 2-0 to climb above Athletic Bilbao into fifth on 43 points.
Malaga secured only their seventh win of the campaign when they won 2-0 at Real Sociedad but remain bottom of the standings, level on 26 points with Hercules and Almeria.