West Ham got off to the perfect start in the second minute when Angelo Ogbonna made an astute run to the far post and rose above Matt Targett to head a corner past Emiliano Martinez.
Ogbonna's first goal since December 2019 ranked as West Ham's fastest Premier League strike in four years.
Villa drew level in the 25th minute when Jack Grealish ran at the West Ham defence before letting rip with a 20-yard drive that took a slight deflection on its way past Lukasz Fabianski.
West Ham regained the lead in the 46th minute after an inspired substitution from David Moyes.
Moyes sent on Said Benrahma at half-time and with his first touch the winger chipped in a cross to Jarrod Bowen, who glanced a deft header over Villa keeper Emiliano Martinez for his fourth goal of the season.
Villa winger Trezeguet won a penalty in the 74th minute when Declan Rice tugged at his shirt to prevent him having a shot.
Watkins has been in fine form this season, but he let West Ham off the hook as his penalty hit the bar.
There was more misfortune to come for Watkins in the final moments when he swept home from close-range, only to see the goal chalked off for the narrowest of offside decisions.