The Mercedes driver dominated the race from pole position and was never under threat, finishing well clear of second-placed Max Verstappen.
Verstappen made a two-stop strategy work after the early running on a wet track, which followed the Dutchman crashing on his way to the grid and need urgent repair work in the minutes before the lights went out.
At the start, Bottas appeared to move before the lights went out and he and Sergio Perez were then slow away from second and fourth, while Hamilton and Stroll leapt clear, with the fast-starting Verstappen and Ferrari drivers charging up the order.
Hamilton pulled away from Stroll through the opening corners while Verstappen sealed third going into Turn 2 after Vettel slid on the exit of the first turn, losing momentum.
At the front, Hamilton raced to a 3.1s lead at the end of the opening tour, with the frontrunners starting to shed their intermediates for slicks at the end of lap two of 71, led by Leclerc and Bottas, who took the softs and mediums respectively.
Hamilton and Stroll came in for their own mediums at the end of the following tour, with Hamilton rejoining in the net lead, while Verstappen stayed out for one more lap and used his time in the lead to jump past Stroll when he took his own mediums at the end of lap four.
While Hamilton quickly retook the lead ahead of Verstappen, Stroll found himself running behind both Haas cars after Kevin Magnussen and Romain Grosjean pitted at the end of the formation lap to take mediums.
By lap six and the end of the early pitstop chaos, Hamilton led Verstappen by 7.8s, which he set about extending with a series of fastest laps.
Stroll dispatched Grosjean with a bold move aided by DRS into Turn 1 and the set about catching and passing Magnussen, which he did after a brief pause to take third at the same spot at the start of lap 16.
As the drivers were regularly told of the threat of more rain, Hamilton continued to extend his lead over Verstappen – while Stroll did not immediately close up on the Red Bull, instead coming under increasing pressure from Bottas.
The second Mercedes driver had followed Stroll through the field after a brief off-track excursion at Turn 2 when he slide wide while fighting Leclerc, who quickly began to struggle for grip on his softs.
As the promised rain failed to appear, Bottas pitted first of the leaders for a second time on lap 33 and used the clear air to clear Stroll, who came in two laps later and rejoined well adrift of the Mercedes in fourth.
Verstappen and Hamilton came in on lap 36 and 37 respectively, going for the hard and medium tyres in turn, and while they stayed in the same order, Verstappen was immediately in danger from Bottas's rapid pace on fresh mediums.
While Hamilton was busy extending his lead up above 20 seconds, Bottas homed in on Verstappen with his softer rubber with a series of fastest laps.
By lap 45 he was within striking distance, but after falling back in traffic Mercedes opted to bring Bottas in for a third time and switch him to the hards, with a 22-second gap to close to take second.
Although the Finn tore chunks from Verstappen's lead in the early stages of his final stint, he did not close in as quickly as might have been expected despite his tyre advantage.
After they had dodged their way through traffic it all came down to the final lap, but although Bottas was finally within DRS range he was not close enough into Turn 1 and could not find away by, coming up 0.7s short.
At the front, after some confusion with his engineer about a late stop and which tyre to take, Hamilton swapped his massive lead over Verstappen to come in a take fresh softs at the end, which he used to break the fastest lap twice – for the second time on the final tour.
He won by 8.7s at the flag to take his eighth win at the Hungaroring.
With his win, Hamilton becomes the second driver to triumph in the same grand prix eight times alongside Michael Schumacher, who also took eight victories in the French GP.
Behind the top three, Stroll finished 57.5s behind Hamilton.
Alex Albon went from 13th on the grid to take fifth ahead of Sebastian Vettel, who, shortly after teammate Charles Leclerc made an early second stop despite the possibility of rain.
It looked like it had worked a treat for Vettel, but running deep into Turn 2 late on cost him against the Red Bull.
Perez recovered to seventh at the finish ahead of the long-middle-stint running Daniel Ricciardo.
Magnussen scored a magnificent ninth to take Haas's first points of 2020 after sliding down the order as the quicker cars eased by across the race.
But the Dane nevertheless held on to take ninth ahead of Carlos Sainz Jr, who survived contact in the pitlane with Williams's Nicholas Latifi (who finished 19th and last after two spins, one with a puncture immediately after the clash with the McLaren, for which he was given a five-second time penalty).
Sainz prevailed in a tight late scrap with Leclerc to take the final point.
Latifi ended up as the final runner, with Pierre Gasly the only non-finisher as he retired after 25 laps with smoke pouring from his AlphaTauri in the pitlane.