Troyes host Bordeaux in the rearranged semi-final of the Coupe de France on Tuesday for the right to play Evian TG in the final.
Juan Manuel Olivera scored the winner nine minutes from full-time with a header at Estadio Centenario, lifting Penarol to within three points of top spot.
Both sides finished the encounter with 10 men after Penarol's Sebastian Piriz and Progreso's Jonathan Souza Motta saw red.
While Penarol edged a side sitting near the bottom, Defensor failed against bottom-placed Bella Vista, drawing 0-0.
It extended their unbeaten run to eight matches ahead of a huge clash against River Plate.
River Plate drew 1-1 at home to Danubio after Gabriel Leyes and Ignacio Gonzalez traded goals in the opening six minutes in Montevideo.
Guillermo Almada's River Plate side sit third on the table, also three points behind the league leaders.
Nacional slumped to a second straight loss as they were beaten 2-0 by Juventud de Las Piedras in an encounter they finished with 10 men.
Wanderers prevailed 2-0 at home to Liverpool as both sides had a man sent off, while Fenix were too good for Cerro in a 3-0 win.
El Tanque Sisley and Racing played out a 0-0 draw and Central Espanol and Cerro Largo also finished goalless.