There are two main reasons annotation is often a challenge. The first is that writing copy that is succinct with the right amount of detail is tricky. The second is that implementation can be a pain, because you always have to muck around with placement in an ad hoc fashion. To help out with the second reason, Susie Lu developed d3-annotation. It takes away much of the main of adding labels and context to your charts with d3.js.
The whole writing part is still up to you, but at least you don’t have to think so much about implementation.