Roared on by a crowd of more than 140,000, Hamilton attempted to overtake Verstappen on Copse corner on the first lap instead sending the Red Bull careening off the track and into the barrier.
Charles Leclerc grabbed the lead but, despite having to add 10 seconds to a pit stop, Mercedes star Hamilton caught the Ferrari and overtook at Copse on lap 50 of the 52-lap race.
Verstappen, meanwhile, was taken to hospital "for further precautionary tests", said Red Bull.
"I hope Lewis is very happy with himself," said Red Bull team principal Christian Horner. "That's a hollow victory."
Hamilton's win ended Red Bull's streak of five straight victories to cut Verstappen's lead in the championship to eight points.
Monegasque Leclerc was second, 3.81sec back to revive Ferrari's season.
The second Mercedes, driven by Finn Valtteri Bottas was third, ahead of the McLarens of Briton Lando Norris and Australian Daniel Ricciardo.
Hamilton insisted his attempt to overtake Verstappen was legitimate.
"Always try to be measured in my approach, especially battling with Max. He's very aggressive," Hamilton said.
"Today I was fully alongside him and he did let me into space."
Hamilton was assessed a 10 second penalty but took it during a pit stop when running second and came back on to the track in fourth place.
"Regardless of whether I agree with the penalty I just take it on the chin," he said.
"I'm not going to let anything get in the way of the crowd's enjoyment of the weekend and the national anthem and the British flag."