The bootloader and the main application are basically two separate applications. Thus, both need their own vector table. If I remember correctly, an M0+ has no VTOR register, thus has a fixed vector table.
The safest method to get back into the bootloader is a reset, which disables all interrupts.
Either by letting a watchdog trigger, or call the CMSIS function NVIC_SystemReset().
For our company's application, we use the first method, i.e. hold the ECU in a while loop until the watchdog triggers.