In most normal apps I would recommend designing so that JWEs are not required. Use of a JWE involves applications owning a private key, and the corresponding public key being registered with the authorization server. You then need a key renewal solution, and code gets more complicated. It does not scale well to many apps.
CONFIDENTIALITY REQUIREMENT
Certain information is private these days. Eg personally identifiable information (PII) such as names or emails. Avoid revealing this to internet clients in tokens. Also, claims used by APIs are best not revealed, for similar privacy reasons. This requirement sonetimes leads people to using JWEs.
SIMPLER SOLUTION
In standard web / mobile / API setups, these steps will prevent the need for JWEs:
Use response_type=code
and never receive tokens on the front channel. Older high security setups (FAPI 1.0) recommended JWEs for ID tokens, but this is no longer the case in FAPI 2.0, as long as this flow is used.
Issue access tokens in a reference token format. When APIs are called, this token is introspected and a JWT response can be forwarded to APIs. This task is often done in an API gateway.
Issue ID tokens with no PII. Then, if you send one in an RP initiated logout request, no PII is revealed to the browser or server logs. Instead, web and mobile clients should get PII in HTTP requests to the user info endpoint.
CONCLUSION
JWEs are an option in your security toolbox and there may be some use cases where they make sense. The answer by Spomky Labs provides an interesting example of data protection over an insecure channel.