Because the city doesn't want to pay for it. And the companies, having the money to dig the road up don't want to make their competitor's jobs easier. So pretty classic market failure.
What needs to happen, IMO, is that the last mile should be utility infrastructure, and ISPs should connect to that. Then the ISPs pay the city for use of the last mile on a endpoint by endpoint basis. Lowers the barrier for new ISPs since they don't have to dig up new last mile, and the city is encouraged to upkeep the last mile since it's a revenue stream with a few high paying representatives of customers (so no tragedy of the commons), but the low barrier to entry for ISPs means that the city won't get too connected to individual ISPs.