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.