One way to look at this, start with these two English alternatives:
What did he say to you?
What did he tell you?
Was hat er zu Ihnen gesagt?
nicely corresponds to our first English alternative which used "to say".
There is an equivalent in German for "to tell", and not only in Platt (vertellen) but also in Hochdeutsch (erzählen). However, most German speakers will tell you that they do not use erzählen with the same frequency as Anglophones use "to tell".
Accordingly, there is a tendency to make do with sagen alone where an English speaker would alternate between "to tell" and "to say". Using the preposition zu from time to time then becomes a sort of poor man's substitute for the variety you would have gotten from alternating between sagen and erzählen.
So, to answer your first question, both with and without zu are considered perfectly valid ways of expressing the same thing. When both sentences are spoken in as neutral a way as possible, there is no difference with respect to register and nuance. But of course, the insertion of the zu augments your options for emphasizing (or de-emphasizing) different parts of the sentence depending on where you place the stress.
Was hat er **zu** Ihnen gesagt? (stress on fourth word)
This could be a way for the asker of the question to clarify any misunderstanding that the respondent might have had, i.e., zu Ihnen as opposed to vor Ihnen or über Sie.