weston sets up a signal mask before calling libseat_open_seat, which amongst others ignores SIGTERM. This renders the PDEATHSIG set up by the builtin backend useless.
Consider implementing a "die with child" mode for the builtin backend to use, or at the very least reset the signal mask before setting up the deathsig in the child.