Thanks @jukka_j for the detailed answers, the Github issue is also very informative (plus the exchange here where I think you also answered and that offers more context for the rest of this post).
On a side note, in addition to the note about the Frame Rendering Stats panel, I also realized I got served cached versions for some of my tests despite clearing the site data (which I wrongfully assumed would suffice) further distorting my observations, sorry.
I see the bug is being tackled by refining the documentation for now, as long as that underlying beast of an issue still persists.
In the meantime I’ve tried my hand at adjusting the frame rate dynamically with a simple/naive benchmarking method (for now I just check if Time.deltaTime is below a certain value for a number of consecutive frames and try to further reduce the frame rate if so by increasing the vSyncCount). That works reasonably well (putting of dealing with varying display refresh rates as mentioned in the Github issue for now), but for very high refresh rates (e.g. my 240 Hz display), I have a bit of a problem:
As per the documentation, QualitySettings.vSyncCount is limited to a value of 0, 1, 2, 3 or 4. Thus I can get down to 60 fps by setting vSyncCount to 4 (because 240 Hz / 4 == 60), but can’t get to the 30 fps I want (for which I would need vSyncCount to be 8). I think the other way via Application.targetFrameRate also wouldn’t really work, since I would need to set 60 / 8 == 7.5, plus I would like to stick to requestAnimationFrame and decimation. I also tried to use the OnDemandRendering API, but that doesn’t seem to work with WebGL at all.
So I think the best way is to directly call the framework function that Unity normally calls when changing vSyncCount / targetFrameRate, which should be _emscripten_set_main_loop_timing(mode, value) from .framework.js and for the 240 Hz example, I think I’d need to call it with mode=1 and value=8 to have it use requestAnimationFrame but skip rendering for all but the every 8th call.
So the question is: how can I call _emscripten_set_main_loop_timing from the Unity code (I know how to make JavaScript calls from C#, but how can I get to that function via - presumably - a unityInstance reference)?