Separate 403 path per role? On admin/config/system/site-information, one can specify "Error pages" for 403 (No access) and 404 (Page not found).

It would make a lot of sense to specify different pages here, depending if you are logged in or not.

Currently my idea is to show my custom login + registration page for anonymous users, but something else (not sure yet) for logged-in users.

Is there any solution for this in contrib?
You can work with panels as suggested in the above comment.

Without panels nor any contrib module you can show blocks limited to roles on the specified error node. Review the blocks settings.

Maybe you need multiblock to place blocks several times.