Thanks! Yeah, you can definitely use D3 outside of data visualization; the data-join pattern is useful whenever you want to generate a DOM from data and keep the DOM up-to-date as data changes.
D3 also provides custom event dispatching for loosely-coupled components:
That said, there are higher-level abstractions (e.g., Backbone and Ember) that are explicitly designed for this purpose, and provide useful ways of structuring big applications into separable components. Depending on the size of the application you're trying to build, you might find those useful as well, perhaps in addition to D3.
D3 also provides custom event dispatching for loosely-coupled components:
https://github.com/mbostock/d3/wiki/Internals#wiki-d3_dispat...
That said, there are higher-level abstractions (e.g., Backbone and Ember) that are explicitly designed for this purpose, and provide useful ways of structuring big applications into separable components. Depending on the size of the application you're trying to build, you might find those useful as well, perhaps in addition to D3.