Another main difference is the workflow, because of the target audience. Let me unapck this.
userpass is made for human users. approle is made for services/machines/scripts.
A main difference, caused by this difference of workflow, lies in how you rotate your secrets.
With userpass, each username has a single password. When you change that single password, it’s changed immediately and the previous one is revoked.
Approle works more like traditional API keys (or AWS access keys if you’re familiar with them, and why AWS let you have 2 different keys): for each role-id, you can create multiple secret-id. This becomes very useful when you need to distribute these secrets to multiple instances, and also to rotate them: the creation of a new secret-id and the revocation of the previous one are decoupled.
Another useful difference to remember is that, although both userpass and approle let you set num_uses or IP restrictions on the generated token, approle also lets you set validation constraints on the secret_id: the secret_id can be set to be only valid from specific IPs, only a specific number of times, or have a TTL (this TTL is on the secret-id, not on the token, which can have another TTL).
These secret-id restrictions give you more control on how you can secure your authentication data distribution (wrapping is indeed really nice, but these other settings give you a lot of options to make it work in your workflow, depending on the service you’re trying to secure).