I just noticed that the GeoJSON export doesn't include the wall's towers or gatehouses, apparently - or am I missing something?
That's correct. Towers are not shapes, they are vertices of the wall polygon. If such vertex is also a point of a road polyline, then it's a gatehouse.
Would it be much work to include them in the GeoJSON? So as to not repeat a calculation step and do tangent calculation?