The visitors began well and would have been ahead but for a couple of early saves from Gijon keeper Juan Pablo Colinas to deny the threatening Bruno.
Gijon's resistance didn't last long however, as Villarreal took the lead in the 19th minute when Bruno set up Mario Gaspar to tap in from close range.
The hosts equalised with five minutes of the half remaining when Alberto Ramos's effort from outside the area found the bottom right-hand corner.
Villarreal pulled out a two-goal lead in the 57th minute when Hernan Perez beat Colinas from distance.
Alejandro Galvez made it a nervous finish for the visitors by pulling one back with five minutes to play but Gijon couldn't find an equaliser in the final moments.
Three points for Villarreal sees them move seven points clear of the La Liga drop zone, while defeat for Gijon all but relegates them to the second division.