Lukaku headed home a cross from Nicolo Barella in the 78th minute to add to Marcelo Brozovic’s deflected opener.
Lautaro Martinez also had an effort ruled out after a VAR review as Antonio Conte’s side proved good value for a win which takes them back to the top of the table.
In an opening period dominated by two strong defences, Milan keeper Gianluigi Donnarumma had to be alert to sweep up an errant back-pass from Ricardo Rodriguez.
Lukaku had the first clear chance of the game in the 19th minute when he raced onto a flick-on from Martinez only to see a tame shot well saved by Donnarumma.
The Milan number one then saved brilliantly to tip a Danilo D’Ambrosio effort against the post as Inter began to dominate.
Milan briefly stirred and even had the ball in the net through Hakan Calhanoglu, though play had already been pulled up by the referee for an earlier infringement.
Martinez had a close-range effort ruled out on 36 minutes due to an offside, and Suso wasted a rare Milan chance five minutes later when he took too long in front of Inter keeper Samir Handanovic.
Milan should still have ended the first half in front with Krzysztof Piatek heading their best chance over the bar in the 44th minute from a Rafael Leao cross.
Inter’s 49th minute opener had an air of good fortune about it as Brozovic’s free-kick deflected into the net off the Milan wall.
But it sparked a renewed period of domination by Inter, with both Brozovic and Martinez proceeding to bring saves out of the excellent Donnarumma.
Inter’s inevitable second arrived in the 78th minute when Lukaku, who had struggled to make much of an impression, pounced to extend his side’s lead.
Lukaku turned provider to set up substitute Matteo Politano with a good chance in the 80th minute, but he rattled the bar with a rising shot.
Milan substitute Theo Hernandez also hit the woodwork, but Inter should have stretched their lead in injury time when an Antonio Candreva effort struck both posts and somehow stayed out.