For example, the constraints may be:
1) The graph is read left to right. This informs the layout such that those spiral and circular graph layout algorithms that blow out the graph do not work.
2) Try to keep certain types of nodes vertical aligned, so that they lie on the same horizontal line.
3) Minimize edge crosses.
4) Have the edges be not lines but paths made up of horizontal and vertical lines. This probably requires some path finding as well.
5) Be able to live update in the sense that a new node or edge entry into the graph does not drastically re-layout the graph for reasonable inserts.