Your problem is that your function uses the \override
command, which affects all simultaneous grobs in a given context, and thus it is changing all noteheads in the Staff context (which contains both melody and harmony music). If you change the noteheads only in the Voice context, then your problem is solved:
harmonics =
#(define-music-function
(parser location notes)
(ly:music?)
#{
%\harmonicsOn
\override Voice.NoteHead #'style = #'harmonic-mixed
$notes
\revert Voice.NoteHead #'style
%\harmonicsOff
#}
)