coords = First@Interpreter["StreetAddress"]["14 James Way, Cambridge MA"];
Extract and post-process the graphics primitives from ListPlot[Callout[..]]
and use it with GeoGraphics
:
GeoGraphics[{Polygon[Entity["City", {"Cambridge", "Massachusetts", "UnitedStates"}]],
Cases[ListPlot[{Callout[coords, "Hi", "CalloutStyle" -> Red]}], _GraphicsGroup, All] /.
Offset[a_, b_] :> Offset[a, GeoGridPosition[GeoPosition[b], "Mercator"]]}]