Need for Customer Exits when User Exits were available
User Exits are subroutines.
In the earlier days for writing code inside a user exit, customer needed to register that object with SAP to obtain an access key and then write their own logic inside that subroutine, however this is not the case now.
Customer Exits are function modules with a custom include inside them.
To implement Customer Exits, access keys are not needed.
Customer Exits can be activated/deactivated, this is not the case with user exits.