Villa's second goal, his 12th of the season, broke a 2-2 deadlock in the 67th minute, Thomas MacNamara added another in the 71st and city led the rest of the way.
Larin's final goal pulled Orlando City to 4-3 in the 85th, but after Kaka hit the post on a free kick that would have equalized it in stoppage time, Mix Diskerud broke out and capped the scoring seconds later. The teams combined for seven second-half goals, the most in a half in the MLS this season.
After Villa opened the scoring in the 45th, Larin scored in the 50th from just inside the top of the box, breaking a scoreless drought of 316 minutes for Orlando City. But Javier Calle put away a cross from Thomas MacNamara, just two minutes later, to put New York City back on top.
Alvaro Saborio, who was traded to D.C. United from Real Salt Lake on July 16, put away a right-footer from just outside the box to make it 2-1 in the 37th.
Vancouver's Mauro Rosales and Kendall Waston scored in the first half to help the Whitecaps beat the San Jose Earthquakes 3-1.
Rosales scored in the fifth minute, his first goal for the Whitecaps, and Watson connected in the 32nd with a header off a Rosales corner.
Octavio Rivero added another from the penalty spot in the 56th minute.
Quincy Amarikwa scored a late goal for San Jose, his third in three games since being acquired from the Chicago Fire.
Vancouver moved into second place in the Western Conference.