Jackson opened the scoring after six minutes, cutting inside Elliott Anderson after a heavy Marc Guehi touch and blasting past Gianluigi Donnarumma. Villa goalkeeper Zion Suzuki then kept City at bay with a string of saves, denying Iliman Ndiaye, Rayan Cherki and Abdukodir Khusanov before Ndiaye struck the post.
Erling Haaland levelled early in the second half, powering in a header from Ndiaye's cross on 52 minutes for his 13th goal in 10 appearances this season. Josko Gvardiol nearly completed the comeback when Suzuki turned his blistering drive onto the crossbar, but Villa responded on the hour mark when Ibrahim Mbaye was played in behind the City defence and Jackson drilled home his cross.
The defeat means Enzo Maresca, who became the first manager to win his first seven Premier League games in charge of a new club, has failed to solve City's struggles at Villa Park, where they have now lost in each of the past four seasons.
Villa's victory, their sixth win in seven games in all competitions, lifts them to sixth. Four years on from Unai Emery's arrival, which has transformed the club from a sleeping giant into a Champions League club, the Spaniard saw his reshaped squad deliver after six players from last season's Europa League starting side left in the transfer window. Recruits such as Jackson, Suzuki, Mbaye and Johan Manzambi are already paying dividends.
The result allows Arsenal the chance to move level on points at the top of the table when they host Everton later on Saturday. City, the 10-time English champions, are appealing a guilty verdict on more than 100 charges of breaking financial rules between 2009 and 2018, with sanctions that could include relegation. There was little sign of that distraction affecting Maresca's men, but they were made to pay for two sloppy defensive errors.