The advantage of using a custom plugin (per-project usually) is that you will invariably come up with several small utility tasks to perform during the course of development (not just query-related). It's far cleaner to house these functions under one roof, in one file, rather than sprinkle your templates with custom queries, PHP blocks, and your /third_party folder with a half dozen simple plugins that do one tiny thing.
I would argue strongly in favour of keeping all custom functionality for a site within one package (if not one plugin ... sometimes you'll need an extension as well, and in more complex cases a module). So much less clutter, plus you can use class variables for commonly-used data throughout all of your custom functions (say, an API key if you're making custom API calls, etc).
As for documentation - using the plugin
usage() function is the way to go for plugins - you can document everything and have it visible right from the Plugins screen in EE. For your extensions and modules, you can use PHPDoc with each function, or just add paragraph-style comments with each function to explain what your code does, and then optionally add EE comments in your templates wherever you call your custom functions so that folks know that it's a) custom, and b) what it does.
The disadvantage of going the custom add-on route would be if you, say, only have a couple of custom queries across your site, and no need for custom helper functions - in which case sticking with the Query module omits any overhead from loading another class (i.e., your custom plugin) needlessly. Plus - no need to write a custom plugin!