I do think you can not prevent the warnings when using the %nrbquote function.
From the Online Doc on the %nrbquote function I read the following: If the argument of the %NRBQUOTE function contains an unresolvable macro variable reference or macro invocation, the macro processor issues a warning message before it masks the ampersand or percent sign (assuming the SERROR or MERROR system option, described in is in effect). To suppress the message for unresolved macro variables, use the %SUPERQ function (discussed later in this section) instead.
So you may want to try the %superq function of which in the documentation is indicated: Because %SUPERQ does not attempt any resolution of its argument, the macro processor does not issue any warning messages that a macro variable reference or a macro invocation has not been resolved. Therefore, even when the %NRBQUOTE function enables the program to work correctly, you can use the %SUPERQ function to eliminate unwanted warning messages from the SAS log.
There isnt any simply because %NrStr is a compile time Quoting function while %NrBQuote is a Execution time quoting function. Hence they mask certain characters at different times in the process.
Is a compile time statement
%put WITH NRSTR Quoting Function NAMES=&names;
Is an execution time statement.
The first rule of macro quoting is 'DONT', if you think you do need it then rethink your approach. If you find you still need it make darn sure you know what you are quoting, why you are quoting it and when you want it quoted.