You can try stopping the queue and then executing the same code..
might be the case where an up and running queue would still hold connections to this one.
Even i'm not sure about this but you can give it a try.
the reason for not purging the AQ$"_S" table is that this table contains purely static informations about your AQ configuration
These are no runtime data to purge!
>What is purge criteria to AQ$_<QUEUE_TABLE_NAME>_S when executing DBMS_AQADM.PURGE_QUEUE_TABLE to purge <QUEUE_TABLE_NAME>?
If you will setup a new AQ configuration these data will also be updated / recreated again.
>Can I use the DML delete to delete the records from _S table directly.
No, this makes no sense. You should never ever edit the AQ$ manually!