A lot of D3's oddness comes from the fact that there isn't anything (to my knowledge) that is comparable. It does just one thing - binding data to DOM elements - does it well, and then gets out of the way.
D3 has libraries that do many other things, and TBH I feel like selection is the most "aged" part of D3. IMO modern component libraries such as React, Vue or Mithril do a much better job of maintaining a binding between data and the DOM tree. But many parts of D3 don't particularly care about how you eventually render the result.