A key feature about data-flow programming that seems too often missed is that it is (or can be) hierarchical.
Define a subgraph of atomic nodes as itself a node with its ports formed from as-yet unconnected ports of its atomic constituents. Compose yet higher subgraphs of subgraphs and atomic nodes. Package all this in some way.
This is directly analogous to syntactic programming where functions aggregate other function calls and all that packaged into a library with an API.