Hamilton hustled Leclerc during a remarkable spell of wheel-to-wheel action at Monza - but the young Monegasque excelled to keep the world champion at bay and register his second win in as many weeks and Ferrari's first on home soil in nine years.
With 11 laps remaining, Hamilton then made a mistake at the first corner in his pursuit of Leclerc, falling off the road and allowing Bottas to take second.
On fresher tyres, Bottas took over from Hamilton in his pursuit of Leclerc but crossed the line just eight-tenths shy of the Ferrari star.
In contrast to Leclerc's heroics at the Cathedral of Speed, Sebastian Vettel endured yet another torrid afternoon in the sister Ferrari.
The four-time world champion took the chequered flag a dismal 13th and one lap down after a spin at the Ascari chicane on lap six.
Vettel had to stop for a new front wing after he clumsily collided with Lance Stroll in his attempt to rejoin the track following his mistake. He was hit with a 10-second stop-and-go penalty for his part in the incident.
Hamilton's late error allowed Bottas to reduce the championship deficit to 63 points with seven rounds left. Review all the action:
Welcome to The Independent's live coverage from the Autodromo Nazionale Monza where Ferrari's Charles Leclerc and Mercedes' Lewis Hamilton start on the front row.
Some bad news for Kimi Raikkonen. The Finnish racer will start from the pit lane after making changes to his Alfa Romeo car. It's been a weekend to forget for him.
Paul di Resta on the problems Sebastian Vettel faces at Ferrari.
"He's clearly not happy with the car and not connecting with it as much as he did," he said.
"Before that run that Leclerc's on at the moment, it was actually the other way. I get the feeling yesterday he was in a very good place, a bit frustrated he didn't get that tow and the speed that he could have jumped Charles.
"What he needs to do today to show the four-time world champion that he is. I think Ferrari will show loyalty with him until he comes good again."
Max Verstappen faces quite a challenge today. He starts from the back of the grid. How does he fancy his chances then?
"It’s a long race but you don’t have a lot of time to get through the field because the fastest cars are pulling away," he tells Sky Sports. "We have a good race car so we can definitely move forward. I’m aiming for fifth, so let’s see."
1/53: A clean start from the Ferrari man, who pulls cleanly away, keeping Hamilton at bay as he does so. Hamilton was pushed out wide but just about managed to keep his place ahead of Bottas.
1/53: A bad start for Verstappen, to say the least. The Dutch man bumped Perez in the first chicane before pitting for a front wing change. He also bolts on a set of softs. There's a long way to go.
4/53: Sparks flying between Albon and Sainz! The former overtakes before Sainz returns the favour through the next corner... or at least he tries. Instead, he loses control and drifts out wide onto the gravel. We're waiting to see if that's classes as a racing incident.
6/53: Dramatic scenes here! Vettel's race looks to be in serious danger after spinning dangerously and drifting into the gravel. He makes his way back onto the track but almost collides with Stroll. Stroll did his best to get around the Ferrari but ended up on the gravel too. That was poor play from Vettel. He's surely set to pick up a penalty for that.
10/53: Things look to have settled a bit after that thrilling start. Leclerc looks comfortable out front, with Hamilton and Bottas continuing to give chase. There's still gravel on the track at Ascari though - that's going to prove problematic.
13/53: Vettel has just been given a 10 second stop-go penalty for returning to the track in an unsafe manner. He's way down in 19th, ahead of only Grosjean. His race has gone from bad to worse to terrible.