Can you give me a a terse summary of what "checkout" means that doesn't involve needing to either list or ignore several very different types operations?
The repository is a store, you check out the previously saved instance of a file, a group of files, or a subtree. In that regards, switching branches and restoring files is actually the same thing. A commit stores whole files and branches are pointers to commits (which update themeselves).
Maybe you can explain how is it leaky based on your understanding of version control?