This is currently only possible via backend triggers. While triggers can become complicated, it usually the much 'safer' option when handling side effects as they are always executed.
A hypothetical frontend function, running before a delete on a list field, would need to be reimplemented on every list and every form, now and in the future, that could also delete the same record - directly or indirectly via cascading relationships.
Even if we would add these frontend functions in the future, handling data should always be done in the backend. While triggers can become complex, you can learn techniques to vastly simplify your logic and make everything more straightforward.