You can use code and data in different modules - just declare symbols "global" if they're defined in this module and need to be used in another - and declare 'em "extern" if they're used in this module but defined in another. Then put both (all) .o files on the command line to ld (or gcc).
"FAR", however, is more of a real mode, segmented memory model thing, as it involves changing the segment registers to some other 64k segment. In Windows/Linux/BSD/OSX (probably others) we've got a "flat" memory model, in which each segment spans the whole 4G (or more on a 64-bit system). There would be no point to a "far" procedure.
Nasm will let you declare arbitrary section names and attributes. I'd have to experiment to see what it would do if you tried "segment .text" and "segment .text2 exec" and a far call between 'em... and you can do that... I doubt if it would work.
Best,
Frank
Edit: You might find this information on segment registers interesting:
http://mirror.freedoors.org/Geezer-1/johnfine/segments.htm