Well, we can extract the graphic primitives from the ListPlot output, even though it feels a bit hackish:
Graphics[
Join[({Black, Circle[{#, 0}, {0.1, 0.4}]} & /@ centers),
{{Red, Inset["|", {75, 0}]}}],
ImageSize -> {640, Automatic},
Prolog ->
ListPlot[Callout[{#, 0}, #, Below] & /@ centers, PlotMarkers -> ""][[1]],
ImagePadding -> 10
]