The Prema Racing driver started alongside the Carlin rookie, who held the lead for the first two laps.
Leclerc briefly took the lead on lap two, but was forced to give the position back as he passed as the safety car was deployed.
But the Monegasque retook the lead several laps later, and held off the home favourite to take his third series win, while O’Sullivan took his maiden podium.
A late charge from Ollie Bearman almost denied O’Sullivan of second, with a last-second lunge at the line almost causing contact between the pair, but the Prema rookie settled for third.
O’Sullivan had a clear getaway off the line, with Bearman up two places on the first lap, having started sixth.
The safety car was deployed early on after Franco Colapinto went off at Luffield, neutralising the race while his Van Amersfoort Racing car was cleared from the barriers.
Racing resumed on lap three, with Isack Hadjar and Kaylen Frederick tussling for sixth place.
O’Sullivan held the lead, but Leclerc was close on his back, and took the lead into Club on lap six.
Further back, Jak Crawford (Prema) was pushed wide while battling Hadjar for fifth, while Jonny Edgar had made up six places to eighth on his return to racing.
The safety car was deployed again on lap 10 after Rafael Villagomez and Nazim Azman made contact, breaking Villagomez’s front wing and sending it under his front wheels, careering him into the barriers at Turn 9.
Roman Stanek’s race was also ended after contact with ART’s Gregoire Saucy.
The green flags were waved again on lap 15, with Victor Martins and Frederick tussling for eighth place before the Frenchman moved through, heading into a battle with Crawford for seventh while Frederick went wide and dropped to 11th.
By lap 19, a train had built up, with the top five all running close together, led by Leclerc.
Bearman snatched third place from Caio Collet at Stowe on the penultimate lap before attempting to pass O’Sullivan, but settling for third at the line for his second podium of the season.
Collet finished in fourth, with Hadjar and Crawford in fifth and sixth respectively. Championship leader Martins was seventh, with Edgar taking eighth having started in 14th.
David Vidales and Reece Ushijima, who took his first series podium in Saturday’s sprint, rounded off the top 10.
F3 Britain – Feature race results: