To my knowledge the isViewer flag dates back to times where reports in OD Core were our only way to visualize data to a consuming end-user.
Since OD Core is complex and actually not meant to be navigated by business users, we came up with the viewer idea where a viewer user can only consume reports. Projects were able to define viewer landing pages as far as I remember. Viewers then just navigated to the project and got the report selected as landing page as their entire view upon ONE DATA and removing any navigational elements towards other parts of the Core system.
With the inception of Apps, the initial viewer concept for navigation (or rather the hiding of navigation) got obsolete. How and if the flag was repurposed, I cannot say. I could imagine that in a transition step from Reports to Apps - also introducing the module nature into the mix - migration/mapping of viewers into APPS_VIEWER modules were/are conducted. That’s just an educated guess based on the API description, though.
Bottomline: If you are creating a user that should interact with Core, set it
false, if you create an “App consumer” that should not be bothered with any other modules, set it to