All of those libraries are 'programmable' - depends on how custom you want it. In my first example i want a hierarchical graph with a bit of information / in the second i want icon-based for differentiation.
things like 'click-and-expand' might depend on your use case (in mine, depending on the semantic value of a node, i might choose to expand by 1 edge, in others i might do more than 1 levels').
Programming is probably easier for you (I have 4 different views for different reasons), and it also depends on your budget.
I also have bookmarked - Network graph | Flourish but I think Go.JS is the best because it does more than just graph outputs.