As @Keyur pointed out overriding class always has a risk of breaking functionality in the future release. As a code developer you need to test your code with the new base code releases and adjust it. It may happen so that the change in the core code is of a nature that requires you to prepare 2 different logic for your customization in the class you are overriding depending on the core version.
Another thing to consider is the fact that overriding a class is a winner-takes-all strategy. Since there is no way to make 2 different modules simultaneously override the same file only 1 definition will be used. This means that when you are overriding any class in your code you are (1) making it impossible for anyone else to do the same and (2) you are at risk of having your code not working because some other module definition is used in a particular case than yours. I have seen many cases where the store would purchase 2 modules that were to add some functionality to the products and both of them would override Mage_Catalog_Model_Product
or Mage_Catalog_Model_Resource_Product
class. This make one of them not working and costing the store additional developer, like me, time of going through both module code, understanding the logic of the extension, creating 3rd module that would win the battle of overwriting and combine those 2 module logic.
On the other hand events
deal with all those problems by making an easy access point to the external modules without the risk of being in conflict. Of course 2 modules may cancel each other results out by hooking into the same event and redefining the same element (ie. shipping price) but this is rather rare as stores won't use n different modules to do the same thing. Even when things like that occurs it is far easier to track and fix than tracking why some overwrite is not working as expected.
To sum up using events where possible is good for developers, both integrators and extension makers as it allows their code to less dependent on the store setup and magento version. It is also better for the store because it lowers the possibility of the additional development need to integrate the bought module into the store.