Mexico captain Marquez smashed home a loose ball in the area after both sides had been reduced to 10 men at the University of Phoenix Stadium in Arizona, before Herrera capped off the result in stoppage time.
An own goal from Alvaro Pereira gave Mexico an early lead, before a second yellow card for Fiorentina midfielder Matias Vecino saw Uruguay go a man down on the stroke of half-time.
However, Mexico also saw red when Andres Guardado received his second yellow, and Uruguay skipper Diego Godin found an equaliser from the resulting free-kick to bring it back to 1-1.
But it was Mexico counterpart Marquez who stole the show, putting the side ahead in the 85th minute with an unstoppable strike, before Herrera headed in a late goal to seal the win.
The 3-1 result meant Mexico's clean sheet streak under coach Juan Carlos Osorio came to an end, but it still saw them extend their unbeaten run to 20 games - which includes 10 straight wins.
Uruguay's defensive stocks had been boosted by the returns of Atletico Madrid pair Godin and Jose Maria Gimenez, who missed their warm-up game against Trinidad and Tobago due to the Champions League final.
However, Godin and Co. were thrown off their game before the match had even started, with organisers inside the stadium playing the Chilean anthem instead of Uruguay's.
The confusion appeared to throw them off, and Mexico came out of the blocks firing and took the lead in just the fourth minute, with Pereira unintentionally heading in Guardado's teasing cross.
Mexico continued to threaten in the early stages and Javier Aquino had the chance to double their lead but his shot was collected by Fernando Muslera.
Uruguay began to slowly work their way back into the game and Carlos Sanchez beat the offside trap, but his cross was brilliantly snuffed out by Mexico captain Rafael Marquez.
Guardado went into the book in the 25th for a late challenge on Sanchez, before Vecino returned the favour on the PSV midfielder two minutes later, also shown a yellow card.
Edinson Cavani had Uruguay's best chance of the half in the 30th minute when he was played in by Nicolas Lodeiro, but the Paris Saint-Germain forward had his strike saved by Mexico goalkeeper Alfredo Talavera.
The task at hand for Uruguay became even more difficult when Vecino received his marching orders in the 45th minute for his second bookable offence, meaning the South Americans had to play the entire second half with 10 men.
Oscar Tabarez brought on Alvaro Gonzalez in place of Lodeiro at the break, and despite their disadvantage in numbers, Uruguay were the better side in the opening stages.
A rare run forward from captain Godin almost resulted in an equaliser in the 58th minute, but Diego Rolan wasted a great opportunity after Cavani's pass set him up.
Rolan was immediately replaced by Hull City forward Abel Hernandez as Uruguay continued to search for a valuable equaliser.
Mexico looked shaky and were failing to deal with the 10 men of Uruguay, creating very few chances on goal as the half went on.
The game was then turned on its head in the 73rd minute when the referee sent off Guardado for a second yellow card after he brought down Sanchez.
The Monterrey winger whipped in a perfect ball from the resulting free-kick, with Godin heading home a well-deserved equaliser for Uruguay.
But the setback inspired Mexico back into the game, and goals from the 37-year-old Marquez and Herrera put the nation top of Group C after the first round of fixtures.