Unfortunately WRKOUTQ doesn’t appear to check authorities concerning the *OUTQ prior to displaying the list. Authority checking does come into play if the user tries to work/display/etc an *OUTQ, but you want to stop the *OUTQs from showing up initially.
I don’t keep track of 3rd party offerings very well and so I can’t help you there, hopefully someone else will be able to. If you don’t find one that meets your need I could certainly provide one though for a reasonable cost
If you would like to build your own solution, the List Objects API could be used to get a listing of all *OUTQs on the system. From there you could subset the list based on a file, keyed by the current user name, containing the list of *OUTQs to not show. Alternatively you could have a file of what the user is supposed to see and have your program read and display those entries. In either case your program could then call the appropriate CL command or API to implement the various functions of WRKOUTQ.
Another suggestion is to create the output queues in different libraries and then using library lists perfrom the wrkoutq *libl/*all for that user. This is a non programmable way around this but it will mean a lot of management in setting up specific library list groups for each group of user