Shelley Duncan hit a pair of home runs and 6, in the rubber match of game series.
Cleveland shortstop Asdrubal Cabrera returned to the lineup and knocked in two runs. Cabrera sat out Saturday's game after fouling a pitch off his left knee in the series opener.
Gomez (2-2) gave up one run on six hits to pick up the win. He walked three and struck out two for the Indians, who start a key three-game series with the AL Central-leading Tigers on Monday.
"It was nice getting that big lead for once," Duncan said. "We haven't done that in awhile. Lately, we've been putting our bullpen in a position where they save us every single game. It was nice to give them a chance and our defense a chance with somewhat of a cushion."
Johnny Giavotella and Eric Hosmer each knocked in two runs for the Royals, who have lost four of six.
Jeff Francis (5-15) allowed four runs on nine hits over five innings to take the loss. He walked three batters.
The Indians took control of the game from the start. Kosuke Fukudome hit a one-out double in the first inning to get Cleveland's offense going. Carlos Santana and Duncan walked to load the bases with two outs. Jason Donald followed with an RBI single to right. Santana also tried to score on the play, but was thrown out at home.
Cleveland tacked on three more runs in the second to build an early 4-0 lead. Jack Hannahan doubled and Lou Marson singled in front of Jerad Head's RBI double. Two outs later, Cabrera hit a two-run double to left.
Kansas City finally got on the board in the fourth. Hosmer led off with a double and moved to third on Giavotella's groundout. Hosmer crossed the plate when Mike Moustakas reached first on third baseman Lonnie Chisenhall's fielding error. Brayan Pena grounded into a double play to keep it a 4-1 contest.
Duncan's homer in the sixth gave the Indians some more breathing room. Tim Collins walked Ezequiel Carrera and Cabrera before Jesse Chavez came in from the bullpen. Santana grounded into a fielder's choice to put men on the corners. Duncan stepped to the plate and crushed Chavez's offering over the wall in left for a 7-1 margin.
The Royals loaded the bases with one out in the sixth. Rafael Perez was called in from the bullpen to get out of the jam. He did just that by getting Pena to ground into a double play.
Melky Cabrera and Giavotella each drove in a run for Kansas City in the seventh to make it 7-3.
Duncan got both the runs back with a two-run homer in the eighth.
The Royals scored three runs in the ninth to account for the final margin. With runners on second and third and one out, Hosmer hit a two-run single to right off Frank Herrmann. Giavotella followed with a run-scoring base hit to right. Chris Perez got the final two outs of the inning for his 32nd save of the season.
"They're in the playoff race for a reason," Royals outfielder Mitch Maier said. "They've got a pretty good team. Obviously, there were some games we should have won against them and didn't, but there's a reason they're in the hunt."
Cleveland took 12 of 18 games from Kansas City this season...The Royals were without shortstop Alcides Escobar (ankle)...Indians third baseman Hannahan left the game with left calf tightness.