The hosts dominated the early stages of the match and at one point had 92% of possession.
Their first chance almost broke the deadlock, but Alexandre Song's shot came back off the inside of the post.
Barca continued to dominate the ball, but Villarreal were holding firm at the back.
However, the deadlock was broken shortly after. Mario Gaspar was adjudged to have handled in the box and Neymar slotted the penalty into the bottom corner for 1-0.
The home side could have made it 2-0 just before half time, but Sergio Asenjo made a good save from Alexis Sanchez's shot.