For configuration managed by the developer I strongly recommend update scripts. Create a module
Projectname_Config with a setup resource and put your configuration scripts in
It is important to use data update scripts because they are triggered after the sql update scripts. So when you update a system with an outdated database, first all extensions are installed (tables created etc.) and then configured.
The naming scheme for data update scripts is
data-install-x.x.x.php to install version x.x.x
data-upgrade-x.x.x-y.y.y.php to upgrade version x.x.x to version y.y.y
Example update script
/** @var Mage_Catalog_Model_Resource_Setup $installer */
$installer = $this;
$germanStoreId = Mage::app()->getStore('de')->getId();
$installer->setConfigData('general/store_information/name', 'My cool shop');
$installer->setConfigData('general/store_information/name', 'Mein knorke Laden', 'stores', $germanStoreId);
Theroretically you can create any data in these scripts, but I usually only use them for simple models like CMS pages and blocks, sometimes for categories.
I don't think, products should be created on a staging system and then moved over. If you must do so, I would try
ImportExport to export the new products on staging to CSV and import them on production.
But the usual approach is to manage your products outside of Magento anyway, then you can import them into each instance.
For other complex products like shopping cart rules it is so complicated and error-prone that I rather take the time to create them manually on each system.
You will find a few tools that promise migrating any data from one store to another but I don't think there is a silver bullet to this problem.