1. /usr/local is usually set up to take priority over /usr, so if you want a newer C compiler or whatever you put it in /usr/local but keep the system compiler in /usr because you might need it for an OS patch or something.
2. If you see an error from something in /usr/local you know not to bother your OS vendor about it because it came from an outside source.
It's largely the same theory as /opt, except stuff in /opt shouldn't link to any libraries in /usr while stuff in /usr/local can (stuff in /opt should be self-contained).
These days people just invent some fiction about how it’s actually “Unix system resources” and not just a second user folder.
tl;dr:
/usr/local - Place for the system administrator to put local stuff. That is, the package manager (apt/dnf/yum/whatever) won't touch anything there.
/usr/bin - "Normal" binaries
/usr/sbin - System binaries, that is, binaries that don't do anything useful when run without superuser privileges
/bin - Well, nowadays just a symlink to /usr/bin. Read the article to understand the historical background why they were split.
/opt - For packages that install everything under one directory instead of being spread out into the standard locations.