There are six ways to enable Delete privileges on a record:
- The object is a Light Application Object (no Bulk API, Sharing, or Streaming API).
- The Owner of a record or their manager (or their manager's manager, etc), or someone above them in the Role hierarchy.
- The user has ModifyAll on that object type
- The object is an Account or detail of an Account that is in a Territory associated with the user.
- If the record's owner is a Queue, any user in that Queue has Delete permissions on that record.
- Run Apex
without sharing or with some special logic there.
I don't believe that #1 is doable for Opportunities. I don't recommend #3. I don't think #4 works for Opportunities. You are trying to solve the limitation of #2. That leaves #5 or #6.
In general, I'd choose #5 - queues are pretty good because they still respect sharing, but broaden it. However, it means that either users or the system need to properly assign records to those queues.