Tomcat
Even if it's easy to make, I'm afraid that using it will be problematic - as far as I know the AI doesn't like to have multiple levels when searching for paths.
For better or (probably) worse, all the AI mechanisms we've used with it so far are custom-made and not any of the built in AI path finding. The RoadLane class is an extension of the 3D Path node, and eventually I'm expecting to create some sample agents that make use of this RoadLane class, as we've been using for Wheel Steal Game. Main point is that it defines "next" and "prior" RoadLanes (as well as left/right, for allowed lane changes). When the road network is initialized, one RoadLane always points to all its neighbors using relative nodepaths, negating any hierarchy troubles. It means it also plays well with any manually placed RoadLanes. The RoadManager would eventually have utilities to compute an overall road network, or at least helpers for calculating how best to get from one point on the network to another.
Of course, I'm open to thoughts here too, if you can imagine a way of using built in navigation toolsets.
to make not only roads, but also other logistical paths: rail (railroads and in the city lanes for streetcars) and pedestrian paths.
Dedicated lanes for public transportation, to take into account the passability of roads…
Yeah all of these seem reasonable! Technically speaking, nothing would stop being e.g. rail roads, especially once we get this feature in place to allow custom input meshes with path deformation. We would need to be able to detect "custom" usage to disable some functionality, or introduce the concept of "segment type" so that you could e.g. only connect rail types to rail types, and car streets to car streets.
Public transit/emergency lanes etc also seems reasonable via composition today, if you add some child node to certain RoadLanes generated, AI agents could detect for certain properties or children of RoadLanes to know if it's for them. Would come down more to how you decide which lanes would be for such use, probably custom logic to run after the signal emits for "road updated" (on_road_updated on the RoadContainer class)