My "minimal fixed GLQuake" engine has this (but not in the menus); just look for the qboolean called "mouselooking" and the cvar called "freelook" for all that you need. Source: . For bonus points it interoperates cleanly with the old +mlook method.
The freelook cvar is just a simple 1 or 0, so you can put it in the menus in much the same way as lookspring or lookstrafe are already done.