(A warning ahead: I'm not familiar with road terminology. I'm using "country road", "freeway", "interstate", "junction", "feeder road", "road surface", "kerbstone" and similar words without being sure whether I'm doing that correctly.)

So the designer places splines by hand. The splines by themselves just define geometry, what is not sufficient by itself. Besides geometry, such a spline need to have meta data associated with it. The geometry and the meta data together is modeled as a piece of your internal representation of the road network.

Each node in the network can be understood as a model for a distinguishable piece of the road network. A node that represents a line of road refers to two other nodes, namely one at the beginning and one at the end of the line. A T junction refers to three other nodes, a crossing to four other nodes. Also a bridge is possible, showing 2 pairs of references but not as a crossing. Lets use the abbreviations I-node, T-node, X-node, and B-node in the following. Notice that in this network, when looking at it as a graph, the edges exist explicitly.

When the designer places a spline, the system tracks the geometry, creates a new I-node in the network and attaches the spline. The tool that the designer has used defines the kind of the road (e.g. country road, interstate, freeway; this belongs to the said meta data) or else the designer declares the kind of road after creating the geometry.

Then the system detects whether the new I-node's spline hits a formerly existing node. If so, and the formerly node is an I-node, and the new line ends at the geometry of the former one, then a new T-node, X-node, or B-node need to be inserted. For now the splines are split, a new "undefined" node is inserted, and all the references are set up. Before the system is able to actually create the road, the designer need to specify what kind of node s/he actually wants there. According to the kinds of participating roads, some possibilities may be excluded. It may further be the case that geometric constraints may exclude possibilities, e.g. the intersection should be in-between 75° and 90° to allow for an X-node. Or there is not enough area left to model the junctions where a country road hits a freeway.

After the above steps are done, an abstract road network exists. The concrete network then requires the generation of concrete geometry for road surface, kerbstone, and perhaps some accessory. Parameters for this (like e.g. road width) are stored in the meta data, initially derived from the kind of road but perhaps overwritten by manual input. T-nodes and X-nodes are defined to have terminals (correct word w.r.t. roads? I don't know) so that the actual connection is part of them (rather than part of the referred I-nodes).

Now the "intelligence" is put into the nodes. If you have an X-node with country roads on all connections, the node is modeling its concrete surface as 2 crossing straight pieces of road, where the transitions are smoothed by inscribing circular arcs. Some node set-ups need prefab support: Bridges, junctions, crossing of interstates, ... show characteristics that need to be a-priorily integrated. E.g. an X-node coming from an intersection of a freeway and a country road is not modeled as a crossing; instead it is modeled so that the country road is bridged over the freeway, and four feeder roads are set into the tangents. Placing accessories like traffic lights, traffic signs, vegetation, ... is also based on the nodes.

Well, the above is a coarse description of a framework. It s hopefully a suitable foundation of how to start.