The Spanish visitors enjoyed plenty of chances to find the net, but Stefan Wessels proved to be too much of an obstacle, and Hans Henrik Andreasen's late goal after a mistake from Cristian Zapata was enough to give the Danes a famous victory.
Odense coach Henrik Clausen had to make do without Peter Utaka and fielded Rurik Gislason as his side's lone striker. Villarreal, meanwhile, relied on the individual class of Nilmar and Giuseppe Rossi up front, with Borja Valero as his side's main creative threat from midfield.
The away side started the match the better side of the two and enjoyed the majority of possession early on. Nevertheless, the first big chance of the game was for Odense. Hans Henrik Andreasen beat his marker to the ball after a corner-kick, but his powerful header went just wide of the Villarreal target.
Villarreal then started creating the clearer chances and young defender Mateo Musacchio almost opened the scoring midway the first half, however, his header was cleared off the line by Eric Djemba-Djemba. The Primera Division side continued to dominate, and Nilmar and Giuseppe Rossi both unleashed some dangerous shots just wide of the goal.
The biggest opportunity to break the deadlock fell to Italy international Rossi in the 35th minute. Borja Valero set up the forward inside the area with an intelligent through pass, but the attacker's left footed shot was pushed wide by Odense goalkeeper Stefan Wessels.
The former Manchester United forward wasted another big chance early in the second-half after being set up by Nilmar, while the latter was unlucky to be denied by a world-class save from Wessels.
Odense failed to really trouble the Villarreal back-line, but they still came close to grabbing the lead at the hour mark. Kalilou Traore controlled a loose ball on the edge of the area before unleashing a powerful volley, but Diego Lopez pulled off a superb save to deny the holding midfielder.
There was nothing Lopez could do against Hans Henrik Andreasen's 84th minute strike, though, as the attacking midfielder didn't show any mercy after a disastrous back-pass from Zapata, pouncing on the ball to lash into the roof of the net.
Odense resume match action on Saturday when they host Lyngby in the Danish league. Villarreal's La Liga opener against Sporting Gijon on Saturday is likely to be postponed due to a planned strike in Spain's top flight.
Odense 1-0 Villarreal
