If there really isn't a simple query to find the information then we'll have to brute-force it...
Two key behaviors are described in
[If a list of fonts is given] the first valid font is used.
[If a single font is given and] the font cannot be found you will get an error message.
That suggests something like this function:
" preserve existing value
let l:fonts = &guifont
for font in split(l:fonts, ",")
exe "set guifont=" . font
echo "Applied GUI font: " . font
" ie: Vim(set):E596: Invalid font(s): guifont=<font-name>
" always restore original value
let &guifont = l:fonts
:call ReportFirstValidGuiFont() and it will iterate over the comma separated font list, setting each font as the sole
guifonts value. It will print a message naming the first one that doesn't cause an error and exit. The printed name should be the font that is currently applied.