You may be missing the crucial point that soft deleting is managed entirely in code (forgive me if I'm wrong).
Whilst applying an onDelete('cascade') to a foreign key constraint will instruct the database to cascade the delete if the foreign relationship is removed, a soft delete is merely a column in the database that Laravel knows not to return by default. Using the SoftDeletes trait in your model will add a global scope that tacks a whereNull('deleted_at') onto each query for that model, unless you explicitly tell it to return the model withTrashed or onlyTrashed.
I suppose if you really did want to manage it at the database level, you could setup a trigger on the deleted_at column of the parent to then go and set the deleted_at on each child, but again, because soft deletes are managed at the application level, each time you add a new relationship, you have to alter the behaviour of the trigger to account for this. Add to this the fact that perhaps not all database engines support triggers, or the syntax for them is different, you're likely going to cause yourself more issues in the long run if you forget to update a trigger.
Keep in mind that in code, you're only writing the event listener once and only ever touch that if you need to add another delete relationship.
One last thought with your movie credits example; if you delete an actor from your database, they were still in that movie, regardless of whether or not you're still tracking them in your application as active.
Again, if the referential integrity is critical to your application and you don't want to address the issue in code, perhaps you could leave deletes at the database level with cascading and write to an audit log when something was deleted or delete from the pivot tables when you soft delete the parent record.