Why can’t air traffic control radars determine the altitudes of primary targets?
without knowing its elevation angle, it could be located anywhere along a circular arc extending from the horizon to the zenith at the specified distance from the radar


Well, not quite.  Aircraft are generally much more restricted in their vertical positioning.  If there's a return from 30 miles away, that aircraft can't be overhead.  (And radars normally have a maximum elevation to the beam, often around 70 degrees).  

This document suggests that (at least as of 1989) determining elevation angle was very difficult for ATC primary radar.  It was possible by cross-correlating information from multiple feeds, but that this was not routinely done.  The document focuses on how useful that would be for helping to remove ground clutter.

Even if some elevation information were available, that data might not be presented to controllers unless it were of a useful precision.  If the precision were worse than say 1500 feet, would that be useful?  


  Besides, military radars can and do provide altitude information for primary targets


Radartutorial suggests that vertical discrimination (or 3D radar) requires extra equipment and is therefore more expensive.  Since ATC can get this information by secondary radar, the expense of gathering it via a 3D primary system is avoided.

Besides cost, older 3D radar would scan a region more slowly than a 2D radar.