Hello Benjamin,
This is an interesting problem. I'm going to provide my opinion, but I highly recommend studying up on International SEO, which you can do at the links below:
https://cloudz.click/learn/seo/international-seo
http://www.aleydasolis.com/en/
I don't know what the plugin does, but if it generates a new URL (e.g. adds ?loc=ca or something like that) for the location change you'll want to use rel="alternate" hreflang="*" tags, which would look something like this:
Google recommends putting one language per page, so that would be a different URL for each version, as highlighted in red here.
**However, it sounds to me like all of this is done client-side using JavaScript, and that the URL doesn't change, only the content.** If this is the case - as long as you are serving the same content to Googlebot crawling in Canada as you are to a visitor in Canada you probably won't have any issues, as described here: https://webmasters.googleblog.com/2008/06/how-google-defines-ip-delivery.html .
For the situation you described, it seems like you could put both keyword variations in the content and that would be good enough. But then you don't want to spell specialising with an S in one line and specializing with a z in the next. 
Another thing to look into is whether both versions of the content appear in the code, or just one or the other. You definitely don't want to have multiple versions of the content in the source code. But you also don't want to hide both versions via JavaScript, only to load one or the other client-side. That creates even more problems.
One would think there would be a Vary: Location response header, similar to how responses are provided when content varies by user-agent or cookie: https://www.fastly.com/blog/best-practices-for-using-the-vary-header . Alas, I can't find any use cases of this and it's not a "thing". I'm not sure why this is, but maybe an International SEO Expert like Alayda Solis would know. I'll ping her into the thread if she has time.