Great! I'm happy to hear that you solved the problem with the flags.
Regarding the clicks, it seems I failed to click the currency switcher the first time. I'm visiting the site right now, and it works correctly. If you see any problem when clicking on the currency switcher, and it disappears if you deactivate LiteSpeed, then the problem lies in the LiteSpeed configuration.
Just tried twice again. It can't switch back to USD at the first click, need to click second time to take effect. In fact, I can live with that for now.
1. sitekey not found, though I've unregistered and re-registered several time.
2. PHP Fatal error: Uncaught InvalidArgumentException: Argument $language_code must be a non empty string.
If LS indeed does not cache files like admin-ajax.php, then you must contact them and ask them for a workaround on how to exclude this file from cache.
This article explain how the LS cache options work. If you have any questions about these settings you must contact their support service. This is the WPML support service and the configuration of LS Cache falls outside of our scope.
We have found that the issue is caused by the configuration of the LS Cache plugin, because disabling it solves the problem. Our 2nd-tier specialists recommended excluding the admin-ajax.php file from cache.
If the LS Cache plugin indeed excludes the admin-ajax.php file (this is something you need to ask them), then you must contact them to get the correct configuration for their plugin so the currency switcher can work as expected.
The Rest API has no impact on the language switcher. The site/WPML is not fetching any info from an external server via the Rest API when switching currencies.
I'd recommend explaining to them that if LS Cache is deactivated, the currency switcher works correctly, so there must be another configuration causing this behavior.