app/code/core – Holds modules that are distributed with the base Magento and make up the core functionality.
app/code/community – Holds modules that are developed by third-parties
app/code/local – Holds custom modules you developed, including Mage code overrides.
Why does Magento use multiple code pools for our customization?
It will load local first, community second, and core third. It uses three for organization purposes and to help solve issues when two+ 3rd party extensions are trying to rewrite the same thing. In a example were you have two extensions in app/code/community trying to rewrite the same model, you can simply make a extension in app/code/local and merge the two extensions logic together.
Why doesn’t Magento use single code pool for customization?
It was done this was to try to have some code organization. Also, when you have 3rd party conflicts, the local is great to help solve those issues. The local is also great to have extensions that only that site will ever have.