Our requirement is to either "hard delete" or "resolve and delete" active work objects. For resolved cases I can use purge and archive OOTB. But for active cases I think I will have to manually remove the entries from all the work processing related tables.
This isn't something that I've done before, so cannot offer any advice based on experience.
But a couple of points
1. Do you use the search gadget (Lucene/Elastic Search)?
If so I should imaging the search index will still contain entries for any work you delete.
2. Do you use SLAs?
Again, if so you're likely to have entries in the PR_SYS_QUEUE_SLA table which won't be able to find the parent work object.
I'm not sure if this will be handled silently or reported as an error in the logs, so I would suggest that you test for this.
Lastly, returning to the Purge and Archive. If you're intended to remove active work, would you want to consider calling the UpdateStatus activity to set the states to Resolved-<your choice>, then using the Purge feature?