I cannot comment yet, but to clarify Josh Fradley's answer:
The problem with your code is that it is calling unstable_cache() every time you call fetchProductWithCache. The code is creating a new instance of the cached function for each call to fetchProductWithCache, effectively creating a new independent cache entry but for the same key. This is very prone to race conditions in regards to the cached data returned. It is just plain incorrect.
The correct way is to do what Josh Fradley wrote. Declare your cached function once, meaning only call unstable_cache() once for the function you want to cache. Then call that function with your argument for country.
So replace your declaration of fetchProductWithCache with his and it should work.
BTW, just a heads up. You cannot mix time based revalidation with tags.