The Mercedes driver began on pole and led for the entirety of the race.
But a chaotic start, which saw two crashes on a damp track, combined with Ferrari’s ultimately flawed decision to pit Vettel early allowed Hamilton to take the race with relative ease.
Max Verstappen of Red Bull claimed third ahead of teammate Daniel Ricciardo and Kimi Raikkonen in the second Ferrari.
Vettel had started from second but pitted after the virtual safety car was deployed when Lance Stroll of Williams crashed.
The German hoped to get a jump on the soft tires as the track dried and rejoined the race in sixth position. But another crash, this time when Antonio Giovinazzi smashed his Sauber into the pit wall, soon followed.
That allowed the other leading contenders, including Hamilton, to pit and switch to the softs without losing position as the safety car took to the track.
When the safety car departed, Hamilton was able to stretch his lead while Vettel negotiated the traffic in front of him.
It was a stroke of luck that Hamilton acknowledged on the podium after the race.
“This race is so real and exciting and we were matching times so if there wasn’t a safety car it would have been a lot closer,” he said.
Vettel pulled out some spectacular moves to reclaim second position, including a dramatic dive around the outside to get past Ricciardo, but it wasn’t enough to get close to Hamilton.
“My target was to catch Lewis, I was getting angry behind the train,” Vettel said later. “I felt I could go faster in these conditions.”
Another driver making serious moves Sunday was Verstappen.
The Dutchman started in 16th position after a suffering engine troubles during a disastrous qualifying session Saturday.
But a stupendous first lap saw him race up the field. At one stage he was pushing Hamilton for the lead before falling back and succumbing to pressure from Vettel.
“It was a very challenging race but I really enjoyed it,” Verstappen said when speaking from the podium. “I think I overtook nine cars in the opening lap so it was a very good race for me.”
Further down the field Sunday, Valtteri Bottas claimed sixth in the second Williams ahead of Carlos Sainz in the Torro Rosso and Kevin Magnussen of Haas.
The points positions were closed out by the Force India’s of Sergio Perez and Esteban Ocon.
Hamilton and Vettel are now level on points atop the drivers championship having each claimed a win and a second place in the first two races.
In the constructors championship, Mercedes now leads Ferrari by a solitary point.