Pablo Fornals and Antonio both went close to doubling the lead, Fornals when he drilled just wide of the far post at a set piece and Antonio when he breezed past Lisandro Martínez, advanced into the box and was again denied by de Gea.
The hosts had already introduced Casemiro, Martínez and Marcus Rashford from the bench, and the former thought he had levelled on 72 minutes when he got his head on a Bruno Fernandes free-kick to beat Areola. A VAR intervention showed the substitute was offside.
West Ham’s reprieve was only a temporary one, though, as the Red Devils’ next set-piece, five minutes later, did lead to their equaliser.
Fernandes again provided the delivery, this time from a corner, and the unfortunate Aguerd diverted into his own net.
The home crowd were buoyed and West Ham were sent to a cruel defeat right at the death when Wout Weghorst’s blocked shot fell kindly for Garnacho, whose first touch killed the ball inside the area and the second curled into the far corner.
To rub salt into the wounds, Fred then seized upon some loose defending to fire home a third for his side five minutes into stoppage time.
Manchester United: De Gea, Dalot, Lindelöf (Martínez 58), Maguire ©, Malacia, McTominay (Casemiro 46), Sabitzer (Fred 86), Antony (Rashford 58), Fernandes, Garnacho (Varane 90+3), Weghorst
Subs: Heaton (GK), Wan-Bissaka, Elanga, Pellistri
Goals: Aguerd og 77, Garnacho 90, Fred 90+5
Booked: Maguire, McTominay
West Ham United: Areola, Johnson, Aguerd, Ogbonna, Emerson, Rice ©, Souček, Paquetá, Fornals (Bowen 74), Benrahma, Antonio (Scamacca 86)
Subs: Anang (GK), Cresswell, Kehrer, Swyer, Downes, Lanzini, Mubama
Goal: Benrahma 54
Referee: Michael Salisbury