The victory was Lazio's first away from home against Milan in Serie A since September 1989, ending a 29-match winless run in the fixture.
Immobile's 100th Lazio goal put the capital club in the lead but mid-table Milan quickly levelled after Krzysztof Piatek's flick was diverted into his own net by Bastos.
After an end-to-end first half, both sides struggled for momentum after the interval and it took an exquisite pass from Luis Alberto to set up Lazio's winner.
The Spaniard cleverly found Correa and he did the rest, charging into the penalty area to slot an 83rd-minute winner.
Immobile started the match with 12 Serie A goals this season - two more than Milan - and after starting brightly, he hit the crossbar with a curling 22nd-minute effort.
The prolific striker was not to be denied and gave Lazio the lead with a superb glancing header from Manuel Lazzari's terrific cross from the right.
Lazio were more than deserving of their lead but were pegged back in the 28th minute through Bastos' own goal, and Milan were inches away from taking the lead when Hakan Calhanoglu's corner caught goalkeeper Thomas Strakosha off guard and nearly crept in.
Goalmouth action was minimal after the break but Lazio thought they had won a penalty after a challenge from Theo Hernandez on Lazzari. Referee Gianpaolo Calvarese was not interested, though.
Milan goalkeeper Gianluigi Donnarumma was alert to keep out a good Francesco Acerbi effort, too, as Lazio pressed for a match-winning goal.
And it came seven minutes from time when Alberto picked out Correa and the Argentina international calmly scored his third goal in five matches.
100 - Ciro #Immobile has netted his 100th goal for Lazio in all competitions (in 147 matches):
77 right-footedNovember 3, 2019
What it means
While Lazio moved up to fourth, Milan's indifferent start to the season is shown by the fact they sit 11th, already 16 points behind league leaders Juventus.
Immobile's milestone night
The Lazio striker showed why he is Serie A's top scorer with another terrific performance. Immobile's movement for his first-half header was outstanding, the forward cleverly creating space with a darting run before heading home in style. He could have easily scored more than once and linked superbly with the equally sharp Luis Alberto.
Tears of frustration
Milan midfielder Samuel Castillejo looked lively and creative in the early stages. The 24-year-old is pushing to be a first-team regular for Milan but was forced off with injury in the 36th minute and he was emotional as a result.