Is there a way to force an app refresh programmatically?

Yes there is:

https://docs.expo.io/versions/v17.0.0/sdk/util.html

`Expo.Util.reload()``

Reloads the current experience. This will fetch and load the newest available JS supported by the device’s Expo environment. This is useful for triggering an update of your experience if you have published a new version.