Chances were few and far between for both sides in a tight first half, but Ashley Young went close against his former team early on with a curled effort that landed just wide of Villa's post.
However, the Austrian forward atoned for his earlier error on the stroke of half-time by drilling the ball past David de Gea from the edge of the area after Christian Benteke had dispossessed Chris Smalling.
The hosts doubled their lead just minutes after the restart as Gabriel Agbonlahor broke free before delivering a perfect cross to allow Weimann to tap in his second of the match.
At half-time, Sir Alex Ferguson introduced Hernandez to the game and the change had the desired effect when the Mexican broke free of the Villa defence before slotting the balls past Brad Guzan.
Hernandez then pulled the league leaders level just five minutes later by volleying the ball home from a tight angle following an exchange of passes from Wayne Rooney and Rafael on the right side of midfield.
Villa were forced onto the back foot by United's revival and they almost found themselves behind when Robin van Persie first struck the crossbar with a header before doing the same a minute later with an effort from 20 yards.
United's comeback was complete with three minutes of normal time remaining when Hernandez found space to head in Van Persie's free kick to complete his hat-trick and claim a remarkable victory for the Red Devils.