Some thrilling racing saw Lewis Hamilton eventually get past Charles Leclerc for third at Silverstone.