[A Community Wiki response feels most appropriate here.]
The database is officially a bunch of files (data files, redo logs, control file, parameter files).
An instance is a set of processes and a chunk of memory running on a server. Most of the time an instance has a database open and session 'live' in the instance to interact with the database. An instance is only connected to a single database.
In a RAC (Real Application Clusters) configuration, separate instances on multiple servers can have the same database open.
A server can also have multiple instances running, each instance running a separate database. A common example of this is where development and test database instances are running on the same machine. [Personally, I expect to see less of this as having dev and test on separate virtual servers on the same box provides more control.]
A process on a server will belong to a particular instance, with the exception of the database listener. A single listener may listen (generally on port 1521) and pass connections off to separate instances based on the requested SID or service.