Git is a cli software. If you find yourself repeating a set of commands, what you should do is abstract it using an alias or a script. And you will have you own nice interface.
Not really. The basic entity of git is the commit and git checkout is meant to restore the working tree to the state when the commit has been created. It may act on the whole tree, a specific part and if no commit has been specified, it uses the index as the source. And with branches being just pointers to commits, it's quite easy to see where the range of options comes from.
Git has its model for version control and it's something that most tutorials don't explain. The CLI is giving you maximum control over this model. For daily operations, it's quite easy to wrap it in a much amenable interface.
With the above in order, I found I could subset the git state model:
* temporary branches rather than the "stash"
* commit tentative work to HEAD; amend, discard or set aside in a temporary branches rather than as later discoveries require
* side-step the index/cache/staging_area for most operations -- transfer directly between work tree and HEAD commit