stumbled across
www.openrouteservice.org which seems to be a routing version of openstreetmap.
It has got cycle-specific routing, and even different types of cycle within that.
Appears to generate quite a good route, although it does have a few problems:
* doesn't handle via points particularly well, so if you try to use them to force it to amend a certain part of the route, it will go to the via point but then do an about turn, go back and carry on with its original route.
* same with avoid areas.
One thing I quite like about it though is you can download a cue sheet as xml, and each instruction has got a list of lat longs that represent the route geometry from there until the next instruction - which essentially means I can parse it and create a gpx by taking the first 10 points of each instruction's segment, and set the name of the first one to be the instruction text. This will hopefully produce a gpx with (a) not too high point density, (b) correctly positioned instructions (with the correct shape leading off from each instruction so it's obvious which road it means), and (c) not too much work to generate.
Quite excited about trying this out for real on the road, as (a) (b) and (c) have often seemed like a light/strong/cheap paradox.