I think NASM (even though Linker support is also required) should provide a feature to rename functions and variables.
For example, if we are importing c's printf, we could do something like:
extern _printf as _cprint
so, througout the remainder of the code, we refer to the name _cprint, which in turns, refer to executable snippet
that was under the name _printf.
However, I recognize the fact that for the functionality to work, a linker that supports the functionality is required. In this case,
the linker would change the original name to the new one you set when it copies the object code, that the function or variable, is from into the PE, dll or static library file.
It would be the same for exports.
For example,
global myfunc as superfunc
The latter may not require much linker support.
PS:
The Netwide Assembler Team has made a great Assembler (NASM) and a great Disassembler (NDISASM); why
not also make a netwide linker? One, that's not only a great linker, but also do special things to support NASM special
functionalities.