dc.js is one of those libraries that completely blows client's minds. The hard thing to do as a developer is not to try and filter the data too much. dc.js lets the end-user filter the data interactively and create their own stories, you just have to work out the questions each chart lets the user ask. http://dc-js.github.io/dc.js/
We've really enjoyed c3.js (http://c3js.org/). It has a wide offering of visualizations types and come with nice on-hover tooltips, which is something that I've had trouble finding anywhere else. Unfortunately it's difficult to customize their offerings, but they've covered 90% of our usecases.
I hear this often but I'm not sure I agree. With almost all of these charting libraries you quickly run into the law of leaky abstractions. Most of the examples of things you'd want to do are written pretty clearly by Mike himself. They are easy to adapt by changing a few things around, instead of sticking with an inflexible abstraction.
D3 is super for customization, but it's really really low-level.