I have a webpage that implements a set of tabs each showing different content. The tab clicks do not refresh the page but hide/unhide contents at the client side.
No
Modern crawlers are able to parse dynamically-generated content in the DOM, so using document.title = ... is perfectly fine.
document.title = ...