No it is not possible due to how code selector bitness is set and changed. Others had mentioned unreal mode which works due to descriptor cache limits being "frozen", i.e. retaining their last set value in real mode. Same thing happens to selector bitness - whatever bitness was last set in protected mode, stays in real mode. See e.g. https://f.osdev.org/viewtopic.php?t=32634:
If you do the exact same procedure as you would for unreal mode (entering protected mode, loading selectors with bigger limits, switching back), but you mark the code selector as 32 bit, you'll be (apparently) able to run 32-bit instructions in "real mode" while retaining the segment*16+offset memory model, and without the need for override prefixes (which in this case, would actually turn the instruction into a 16 bit instruction, as in protected mode 32).
The interrupts work the same as in real mode, using the IVT, with real mode addressing (so you can't have vectors that point to memory beyond ffff:ffff).
I, too, was pretty weirded out about this, but I did some testing in bochs (which marks the mode as "Real Mode 32"), in qemu (although I believe KVM crashes), and, most surprisingly, it works on real hardware! (Although it had some crashes at times)
Thus, if you are to enter "proper" 16-bit real mode from protected mode, your descriptor caches have to be set with proper 64K limits and 16-bit bitness, i.e. prior mode has to be 16-bit PM.
And to be sure, the 16-to-32-bit mode is much more easier, with a direct switch, right?
I think technically no, switch to 32PM mode also happens through 16 bit PM, if only for a single instruction. Again, in real mode one cannot change bitness; CPU has to be in PM to reload those parts of descriptor cache. In a typical switch, mov eax, cr0 ; or eax, 1 ; mov cr0, eax sequence switches to 16 bit PM mode, and very next instruction jmp far
reloads descriptor cache from GDT and switches CPU to 32 bit mode.
cr0bit 0 is 0, any reload of a segreg (includingcs) probably only sets the segment base according to Real Address Mode segmentation, but not the other segment data such as the D bit. On entering 32-bit PM you reloadcswithcr0already having PM enabled, but on the way back this requires a switch to a 16-bit PMcsfirst.