Self-service cancellation and transfer can't be separated
Currently, you can enable self-service "cancel and transfer". This means you can't enable self-service cancellation for events where registration is non-transferable.
NB: This whole self-service event code would make a much better extension than core code.