I have seen many time that far pointers are used to work for TSR. Why these TSR program need far pointers and why these are considered harmful for general machine.
Since a TSR program has to share an address space that is not guarantee to stay in a single segment, a far address ( ie containing both segmant:address ) coordinates is required to identify a pointer. This is a little historical since as far as I know it make sense just under DOS.