It is the first time the Brit has won a Formula 1 race on home soil at the eighth attempt.
Piastri, who led most of the race, was hit with a 10-second time penalty on lap 44 for a safety car infringement.
Veteran driver Hulkenberg took third for his first-ever podium in 239 races, an incredible personal achievement.
Ferrari's Lewis Hamilton finished in fourth, ahead of Max Verstappen after his Red Bull spun out.
"You've won the British Grand Prix," exclaimed McLaren's team radio after Norris crossed the line. "This one means a lot, eh?" The tearful 25-year-old responded: "It's beautiful.
"Everything I ever dreamed of, this is everything I wanted to achieve. Aside from winning the championship, this is as good as it gets."
Norris' teammate Piastri was forced to pit after slowing down before a safety car restart.
"I'm not going to say much, I don't want to get myself in trouble," said the Australian post-race.
"I'll live with it. Apparently, you can't brake behind the safety car anymore."
The result at Silverstone puts Norris within eight points of Piastri in the drivers' standings.
Pierre Gasly's Alpine took sixth, with Lance Stroll of Aston Martin, Alex Albon of Williams, Fernando Alonso in the other Aston and George Russell of Mercedes rounding out the top 10.