Josh Williams also scored to help Columbus win for the first time win in Washington since 2010, and snap D.C. United's 17-match home unbeaten run, during which they won 13 matches and drew four.
Columbus has won two of its first three road matches, during a season-opening stretch where it will play five of seven away from home.
Rafael Teixeira scored in his club debut for D.C. on a sensational volley, but couldn't prevent United's first home defeat since the 2012 season opener against Kansas City.
Goalkeeper Bill Hamid made seven saves to keep United in it, including several of the sensational variety.
But shortly after a Hamid made two saves to keep it tied, Speas put Columbus ahead after the goalkeeper failed to hold Federico Higuain's free kick. The rebound eventually fell to Speas, who struck from the edge of the penalty area.
Lionard Pajoy and Dwayne De Rosario both nearly leveled it in the 72nd minute for United, only to be denied by Columbus goalkeeper Andy Gruenebaum.
Otherwise, D.C.'s pressure rarely translated to clear chances, as Gruenebaum finished with four saves.
Columbus opened the scoring in the 15th minute when Williams reached Tyson Wahl's curling free kick and headed beyond a stranded Bill Hamid. Teixeira tied it 7 minutes with a sensational half-volley from 35 yards out that dipped out of the reach of the diving Gruenebaum.
D.C. United's Nick DeLeon left the match in the 30th minute with an apparent injury to his right leg.