List of ways to access WordPress database?

There’s some overlap, but each isn’t an abstraction of the previous, and there are definitely some things you don’t want to do outside of the API. Most things, actually!

WP_Query is for retrieving posts and pages, it doesn’t update anything, and it doesn’t fetch data that isn’t a post or page. The higher level API functions that fetch posts and pages use WP_Query behind the scenes, but WordPress has many other kinds of data (post meta, taxonomies, users, user meta), which WP_Query doesn’t directly deal with.

You can’t use $wpdb directly for most things because you’ll mostly break things. If you’ve spent any time with WordPress, you’ve probably heard of Hooks, Actions, and Filters. Querying the database directly bypasses that whole system, so any modification of queries, fetched data, caches, or actions to be carried out when a particular event happens will all break.