Language
The most obvious difference between D3 and Shiny & ggplot2 is that D3 utilizes JavaScript whereas Shiny and ggplot2 use R. Because I have become more familiar with R through Data Visualization, I find Shiny and ggplot2 easier to use than D3.
Customization Ability
D3 is most similar to the graphics package in R in that plots are built from the ground up and each component is individually specified. While writing a graph from scratch with D3 would be tedious, it would be significantly more customizable in form and interactivity than either Shiny or ggplot2. Because Shiny can use graphics, ggplot2, or any other graphing package within R, it has a high amount of customizability in the graphs displayed, however its interacitibility is more limited because the user is restricted to updating input and display components built into Shiny. ggplot2 similarly limits the user to geoms and specific ggplot2 functions for editing graphs.
While D3 is more customizable, Shiny and ggplot2 are easier to use and create more polished products with less time and effort.