Leonardo Ramos' men scored twice in the final 10 minutes to claim their fourth win in five matches, edging a point clear at the top.
Jorge Rodriguez's 49th-minute goal had given Penarol the lead, but his sending off soon after put them on the back foot.
Danubio made the most of their numerical advantage as Fabricio Formiliano equalised in the 80th minute.
And, just four minutes later, Hugo Sequeira scored what proved to be the winner for Danubio as they climbed top of the league.
River Plate were beaten in the league for the first time this season as Ignacio Gonzalez's 10th-minute goal gave Nacional a 1-0 win.
El Tanque Sisley remain unbeaten but drew for the second straight time as they were held to a 0-0 draw at Liverpool.
Maximiliano Perez's brace helped Fenix draw 2-2 at home to the Wanderers and Enzo Herrera's late goal saw Rentistas overcome Juventud de Las Piedras 1-0.
Cerro Largo secured their first win with a 2-0 victory over Sud America and Diego Zabala's 76th-minute effort saw Racing edge Cerro 1-0.
Struggling Miramar Misiones remain without a win after being beaten 1-0 by Defensor Sporting.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.