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 :h 'guifonts'
:
[If a list of fonts is given] the first valid font is used.
and
[If a single font is given and] the font cannot be found you will get an error message.
That suggests something like this function:
func! ReportFirstValidGuiFont()
" preserve existing value
let l:fonts = &guifont
for font in split(l:fonts, ",")
try
exe "set guifont=" . font
echo "Applied GUI font: " . font
return
catch /E596/
" ie: Vim(set):E596: Invalid font(s): guifont=<font-name>
echo v:exception
finally
" always restore original value
let &guifont = l:fonts
endtry
endfor
endfunc
Call with :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.