The pre-race build-up had been dominated by Typhoon Hagibis but it was just as dramatic on the track as the drivers put on a show for the travelling fans, who packed out the stands in Suzuka.
Bottas started third on the grid but got off the line quickly to leapfrog the two Ferraris, who had locked out the front row in qualifying.
The Finn looked assured throughout as he led from the front to seal his first win since Baku in April - finishing some 14 seconds ahead of Sebastian Vettel, who came home in second.
Polesitter Vettel endured a nightmare start when he jumped the lights but escaped punishment after falling behind Bottas and Hamilton. The German found his way back in front to come home in second.
Charles Leclerc had another weekend to forget, only this time he only had himself to blame. The Monegasque, robbed of victory in Russia by team orders, clashed with Max Verstappen at the first corner and suffered front-wing damage as a result.
Verstappen was later forced to retire from the race as his team-mate Alex Albon finished in fourth ahead of Carlos Sainz in fifth.
Leclerc finished sixth as Vettel closed the gap on his team-mate in the championship standings.