The hosts capitalised on rare defensive errors from Atletico to go 2-0 up before half-time thanks to goals from Manu Trigueros and Jonathan dos Santos.
Roberto Soriano secured the three points in stoppage time as victory lifts Villarreal a point above Atletico and up into fourth place.
"We have to improve and we have to work hard. That is the only way we know to get through difficult moments and accept the reality," Atletico boss Diego Simeone told BeIN Sports Spain.
"The reality is we are not in good form, but there is desire, a will to work hard, the players are still running and, whilst there are those things, it will get better."
Atletico were also hit by injuries to goalkeeper Jan Oblak and midfielder Tiago as both had to be replaced before the break.
Villarreal were fresh from sealing their place in the last 32 of the Europa League on Thursday, where they will face Roma, and started brightly despite taking just one point from their last three La Liga matches.
Stefan Savic had to head clear off his own line from a dos Santos volley after Oblak rushed from his goal to punch a dangerous cross.
Atletico will rue not taking their chances to go in front as a fierce drive from Angel Correa was turned behind at his near post by Sergio Asenjo before Koke's deflected shot from the resulting corner came back off the post.
"We need to be more clinical in front of goal," added Simeone.
"We are lacking the precision we've on plenty of other occasions and we will work to make sure that reappears."
A slack pass from Tiago to Diego Godin teed up Villarreal for the opener on 28 minutes as Trigueros latched onto the loose ball before firing low past the helpless Oblak.
Tiago was replaced whilst Villarreal were still celebrating with a right knee problem.
Antoine Griezmann was voted the third best player in the world for 2016 before kick-off as Real Madrid's Cristiano Ronaldo won the Ballon d'Or.
Yet a year of big disappointments for the Frenchman after defeat in the Champions League and Euro 2016 finals is ending on another low as he was held scoreless for an eighth consecutive La Liga game.
Griezmann had a big chance to equalise for Atletico when he raced through on Asenjo, but on his weaker right foot his shot wasn't accurate enough to beat the goalkeeper.
Moments later it was 2-0 thanks to a rare slip from Oblak.
The Slovenian dislocated his shoulder after dropping a simple cross and dos Santos was on hand to prod into an empty net from close range.
And an awful night for Atletico was rounded off in stoppage time when Soriano found the far corner for Villarreal's third.