Hi Steven,
The keywords you are looking for are "directed graph layout".
If the layout is static (won't change in response to user actions), then graphviz [1] is still the best: get it to produce an xml layout, draw it and do your interactions with d3.
On the other hand, if you do want to add nodes and edges in response to user actions, I can recommend cola.js - it can do many other layouts but you want what they call "flow layout". [2] I don't believe it will do bezier spline routing at this time, though.
I don't have experience with it but d3-dagre is an implementation of graphviz's "dot" directed graph layout in javascript. It does have beziers and might be the easiest pick, but I guess it is no longer maintained. [3]
Cheers,
Gordon