The defeat at Molineux was City's second loss in five days, after Newcastle United dumped them out of the League Cup, and dashed the leaders' hopes of stretching their season-opening run to seven league wins in a row.
A Ruben Dias own goal sent Wolves 1-0 up in the 13th minute, Pedro Neto's shot deflected in off the Portuguese player's knee, but Julian Alvarez levelled the score with a bending free kick in the 58th.
Hwang restored the home side's lead against the run of play in the 66th by firing into the back of the net after a pass from Matheus Cunha.
With City manager Pep Guardiola serving a touchline ban for his third yellow card of the season, the visitors looked distinctly average against determined and hard-working opponents.
Matheus Nunes, who joined City from Wolves at the end of the transfer window after forcing a move by refusing to train, started and was booed by the crowd every time he touched the ball. He was replaced at halftime.