I'm unclear myself. For a start, unlike labels, an issue can only have exclusively one type.
From the docs this appears to be how they envision people using this:
Default issue types are included in every organization, but these can edited, disabled, or deleted. The default types are task, bug, and feature.
On the one hand there's already precedence for this, since PRs are sorta just issues that live in a different tab. If issue types actually let people create new top-level tabs in the UI, that might be interesting. Also it looks like there's a maximum of 10 user-defined types per repo, so it wouldn't even threaten to mess up the UI that much if they did so.
We use labels as module tags; e.g. this PR/issue applies to the "filter" module. Having types be its own thing helps separate the two logical categories and enforce "one type per ticket" at the same time.