I've got this image in my head of clicking a build road button, clicking the start city and holding the cursor over various other cities to see a mouseover readout of the projected total revenue, maintenance cost, and net gain are for each one, picking one and clicking to place the road, whose route is chosen automatically via a shortest path algorithm, and then having worker animations start up along the route to indicate ongoing construction.
While the road is under construction, it would incur double maintenance and bring in no revenue. The revenues and costs of a road could be handled independently of connected cities (as in, no bank modifiers for road trade revenue, thereby giving sea trade a bit of a bump in value), or they could be split up through a weighted averaging of each city's economic weight (so more profitable cities would gain more of the value).
It would also be possible to link any two points, so long as the starting position is either a city or a tile with a road.
Maintenance would be a function of distance and usage, with usage being entirely a function of trade gain -- that way roads to nowhere would have a known fixed cost even without trade. Trade would be a function of the population and the economic power of the two (or more) locations connected.
If I were going to do roads, that'd be how I did it. Slick UI, simple implementation, low user attention required and only high level decisions required.