Is there a way to get the user role form the lifecycle?
Not directly. You need to re-fetch the information you need within your hook. I think it’s a good practice to always do this as usually the hook doesn’t have controll over the parameters the hooked action was called with. For instance, even if your hook depends on a scalar field, you can’t stop the action to be called with fields: [<empty array>] which will make the field unavailable in the event object.
And also, is there a reason that I’m not seeing that makes Strapi hide user roles?
I’d bet the rationale is to only expose the information that needs to be exposed and the role is not strictly necessary so by default it’s not visible. OTOH I really don’t see a reason for why the role cannot be fetched from the login endpoint by using e.g. ?populate=role given the appropriate permissions are met (the user’s role has rights to find the role resource). ./