Barcelona stretched their La Liga lead to nine points, despite throwing away a two-goal advantage at Villarreal.
Barca moved ahead when Ivan Rakitic fired a low shot past several home defenders, pouncing on a loose ball after Lionel Messi’s free-kick.
Neymar calmly converted a controversial penalty after he was adjudged to be fouled by home keeper Sergio Asenjo.
But fourth-placed Villarreal fought back through Cedric Bakambu’s neat finish and Jeremy Mathieu’s own goal.
Barca, who saw nearest rivals Atletico Madrid suffer a shock loss at Sporting Gijon on Saturday, had to settle for a point as they extended their Spanish record unbeaten run to 39 matches in all competitions.
The Catalan side are 13 points ahead of third-placed Real Madrid, who host Sevilla later on Sunday.
Villarreal look unlikely to pip Madrid to an automatic Champions League place, but are well equipped to reach the competition’s qualifying round after a deserved point against the reigning champions.
They remain nine points adrift of Zinedine Zidane’s side, but have a six-point cushion over fifth-placed Sevilla.
Both home goals came after Barca boss Luis Enrique reshuffled his defence with the introduction of Mathieu, who replaced the booked Gerard Pique, and right-back Dani Alves.
The visitors appeared vulnerable to further punishment, but regained their composure to see out the final half hour.
However, there were few chances for either side to nick an action-packed game, which saw referee Jose Sanchez infuriate the home crowd with a series of bizarre decisions.