I keep a growing collection of my own programs (nearly all self-contained shell and Python scripts) in ~/bin. (Some are actually symlinks to scripts located elsewhere.)
I similarly use ~/site for programs installed in my $HOME (usually through "./configure --prefix=$HOME/site; make; make install"); that is, they're only available for a single user. These applications use the traditional bin, lib, etc. directories (~/site/bin, ~/site/lib, etc.).
System-wide programs need to be installed in /usr/local/. So if you have a single executable file, you can drop it in /usr/local/bin. If an archive has its own bin, lib, etc., those go in /usr/local/bin, /usr/local/lib, etc.
The traditional way is to "mix" applications together, with all commands in bin, all libraries in lib, and so forth. This is painful to uninstall, but requires no further settings for $PATH, manpages, shared resources, etc. If you want a completely separate application, you can put it in /opt as /opt/appname. You'll need to configure /opt/appname/bin to be in the $PATH (or specify the full path to execute it).
With all of these options that don't use a configure command, the program needs to already know how to find its libraries (often through a linker RPATH setting, but there are other ways). I would usually not attempt to modify a program if it can't do this already; and certainly wouldn't recommend it for most users.