La Liga Wrap: Barca extend lead over Real
Real are now five points adrift of Barcelona in third after Neymar's outstanding week continued for the Catalan giants.
The Brazilian forward – who scored a hat-trick in Barca's 6-1 thrashing of Celtic in the UEFA Champions League on Wednesday – starred again as Gerardo Martino's side moved three points clear of second-placed Atletico Madrid, who play on Sunday.
Neymar got the hosts going with a 30th-minute penalty, converting successfully after a harsh handball decision against Mario.
Villarreal enjoyed good spells and levelled three minutes after the break thanks to captain Mateo Musacchio's header.
But Neymar had the final say, with the 21-year-old tapping in from close range after excellent build-up work by Cesc Fabregas and Alexis Sanchez with 22 minutes to play.
The win was achieved without star trio Lionel Messi, Victor Valdes and Dani Alves, but Neymar was booked late on – ruling him out of the upcoming La Liga clash against Getafe.
Barcelona have now won 23 successive La Liga fixtures at home.
Meanwhile, Pepe rescued a point for Real Madrid in their frustrating draw against Osasuna as both teams finished with 10 men.
Osasuna took the lead in the 16th minute when Oriol Riera headed home Marc Bertran's pin-point cross and he nodded in a second after more good build-up play.
Sergio Ramos was then shown his 18th career red card for elbowing Riera, but Isco's low effort ensured that Real trailed by just one goal at the break.
After a lull in proceedings in the second half, Real were boosted when Francisco Silva was shown a second yellow card for a challenge on Cristiano Ronaldo.
And Pepe restored parity with 10 minutes remaining when he met Isco's centre to salvage a point.
Other results saw Granada climb into the top half of the table with a 2-0 win at Rayo Vallecano.
Fran Rico and Riki scored the goals for the visitors, while Roque Santa Cruz's late strike gave Malaga 1 -0 home win against Getafe.