Tilmann,
of course instead of deleting a user you can flag him as deleted or nuked if you want the data to be archived. However, that issue is hardly relevant to the on delete cascade discussion. In the event that you really want to delete the user you must delete all his data if you use cascading or not. That task is just made all the more easier if you have cascades.
My point is that it's wrong to create an application or service that references objects so that the kernel and/or other applications can't delete their objects anymore. There might be a better way than cascading to make sure things are deleted, maybe by using triggers? There certainly isn't an easier way though than using on delete cascade.