Query parameters from $_GET vs. using the Drupal menu path Page callbacks can receive wildcard arguments through the Drupal (6 and 7) menu system and using this results in quite nice and clean URLs. Core uses this for things like loading the nodes by their node id. The alternative is to use straight query parameters from $_GET as usual in PHP. Core seems to use this in  a few places, for form redirects, the pager etc.

When would it be appropriate to bypass the menu system and just use a query parameter? What are the pros and cons of the two options for parameter handling?
There's a page with a logic that puts it together and that is determined by path. Core never bypasses the menu router. Parameters are somewhat orthogonal to this. For example, a page doesn't change in itself just because there's a form in it that uses a destination to redirect to said page so we do not add it to the clean URL. Pager is a little different because you could argue that path/to/some/view could become path/to/some/view/1 path/to/some/view/2 as it is paged but how do you differentiate real arguments (like a node id) from a pager? It's better to use a query parameter.