CSS animations are fundamentally incompatible with the way C2 games render. They draw pixels in to a canvas, whereas CSS animations move about DOM elements (i.e. parts of the web page), and DOM elements carry a lot of overhead. In the early days of HTML5 there were some entirely DOM-based game engines, but they ran far slower than canvas ones, so realistically these days noone uses them. BTW realistically C2 always uses requestAnimationFrame; the setTimeout is a fallback for browsers without requestAnimationFrame support, which I think is pretty much only IE9 now.
I'd point out we had similar issues with Construct Classic, which was a native engine. People raised the same kinds of issue about frame drops from time to time. I think I mentioned this earlier, but ultimately a multi-tasking OS which has to hit a very precise 16.7ms timer frequency will in practice have some variation and possibly occasionally drop a frame. Classic worked better in fullscreen mode, and that might be true of browsers as well.
JIT compilation is basically completely invisible to the code. Every browser handles it differently, the way it's done changes over browser releases, there's no way for code to know if it's been JIT compiled or to force it to be done, and trying to force the browser to compile everything could have other detrimental effects like wasting memory or actually degrading performance, especially during startup. I don't think it's realistic to solve it by fiddling with the JIT - it needs to be handled by the browser makers in their javascript engines.