You effectively are using different databases (as far as, e.g., operational characteristics) but with a common interface presented to client apps, letting the visibile database engine serve as an abstraction layer, and the consuming app(s) don't need to be aware of the backend differences, and are also somewhat insulated against needing to change if the storage engine used for various pieces changes.
And (from reading the discussions on pg-hackers) was that it's very hard to keep semantics (transactions, snapshot-isolation, indexes etc).
Different storage-engines have different pros-cons (the same with indexes gin/gist). You could have:
in-memory storage engine (ex: current unlogged tables don't replicate since they don't have wal)
compressed (something like tokudb/mx)
columnar (see monetdb vs citus)
etc
It's harder to use another database because maintance + flexibility (ex: postgresql has arrays).
[1]: http://www.postgresql.org/message-id/CA+U5nM+AFftDf-8UaMoe7Z...
http://www.datanami.com/2015/03/04/fujitsu-adding-column-ori...