I’ve solved this in the past for a client by using remove_meta_box
to hide the default categories meta box, then adding my own meta box via add_meta_box
which outputs categories as a drop-down select list, which effectively limits selection to a single item.