David Ortiz, making his first appearance of the season, grounded into a double play, sending Gomes to third.
Tim Collins relieved and walked Mike Napoli, bringing up Nava, who cracked a pitch into the stands beyond the Red Sox dugout for a 4-2 lead.
Boston had to hang on in the ninth when closer Andrew Bailey surrendered a homer to Lorenzo Cain and put two more runners on. He induced Alex Gordon to ground out, ending the contest for this third save.
Clay Buchholz (4-0) earned the win, surrendering a pair of runs on eight hits over eight innings. He issued one walk and struck out six.
Cain finished 4-for-4 with three runs scored for the Royals.
Ceremonies before the game honoring victims of Monday's Boston Marathon bombings -- as well as the city's police and fire departments, featured a live performance of "Sweet Caroline" by singer Neil Diamond just before the eighth-inning comeback. Diamond's 1970s hit is routinely played at Red Sox home games, and was played in MLB ballparks across the country Tuesday to show support for Boston.
The Friday night game between Boston and Kansas City was postponed because of the massive police manhunt for the remaining suspect in the marathon bombing.