Starting from second on the grid behind Lorenzo, Pedrosa passed his fellow Spaniard on a straightaway with 17 laps to go and never looked back.
"We had a difficult grand prix after the fall two weeks ago," said Pedrosa, who crashed out on the first lap of the previous San Marino GP. "It was tough to maintain our focus, but we stayed calm.
"Jorge got away a little at the beginning, but I was able to catch him and once I got by him I found my pace."
Pedrosa steered his Honda around the 5-kilometre (3.15-miles) MotorLand Aragon circuit in 42 minutes, 10.444 seconds for his 19th career MotoGP win.
Lorenzo finished more than six seconds behind on his Yamaha. Andrea Dovizioso came third, followed by Cal Crutchlow and Ben Spies.
With four races left, Lorenzo has a 33-point lead over Pedrosa.
Lorenzo almost lost control of his bike after Pedrosa hit the front and appeared content to settle for second to limit his losses in the points standings with the season approaching its end.
"I made a good start and tried to stretch it out, but Dani drove great today," said Lorenzo. "It was a good race to secure all the points I could."
Pedrosa completed a Spanish sweep in front of his home fans after Pol Espargaro won in Moto2 and Luis Salom in Moto3.
In the Moto2 class, Espargaro took his third victory of the season. Fellow Spaniard Marc Marquez was second, and British rider Scott Redding was third.
Marquez leads the standings with 258 points. Espargaro is next with 210.
In the Moto3 category, Salom won his second race of the season to rise to second place in the points standings.
Points leader Sandro Cortese was second followed by fellow German Jonas Folger.
Cortese has 245 points. Salom has 194, while Maverick Vinales could not add to his total of 179 after his bike stalled during the warm-up lap.