The route that we've gone is to increase the token expiry time (lets say to 36 hours), and then when a certain threshold is reached, (like 12 hours before the token expires), request a new token from the server.
Why 36 and 12? Totally hypothetical here, but a user might visit a site once every 1.5 days, and a 12 hour window for refreshing leaves time for them to have a life outside of our website (which sounds crazy to me, but that's another story). Choose the hours that seem to fit the behaviors of your users. Try to find a time when users are likely to come back to your site and make an educated decision on a refresh window. Of course, JWT has a refreshable time limit as well, which you might have seen in some applications that say "Sign me in for the next 30 days," after which the user has to reauthenticate.
Security wise? After reading a bunch of answers from SO, it seems that having longer expiry periods does not make your JWTs more vulnerable. If you're paranoid, you can blacklist the JWTs that are old (but still have time remaining), but going over HTTPS should be sufficient for most cases.