OctoPrint won't cancel when my printer is heating up!

You have to thank your firmware for that. Once your firmware is told to heatup to some temperature via M109 or M190, it basically enters a blocked state in which it is impossible to tell it to stop and return control via the serial interface. It pretty much puts its fingers in its ears and goes "lalala" until the requested target temperature is reached. If you hit "Cancel" in OctoPrint during that phase, OctoPrint will no longer continue sending any commands from your selected GCODE file to the printer, but it has to wait for the firmware to become responsive again before it can do anything.

Newer versions of the Marlin mainline version support a special command for canceling heatups (M108). Support for that throughout the thousands of firmware forks out there is way too limited yet though to rely on it being supported, and blindly sending it to a firmware version that doesn't support it might lead to unexpected behaviour.

tldr; This has technical reasons and cannot be changed currently. If you are in a hurry, try disconnecting and then reconnecting - on a lot of printers that will reset it and stop the heatup.