I don't know about the delay part, but if you want to keep a count, you might have an int property in the message header that you increment each time through. You could use the javax.jms.Message get/setIntProperty() methods for this and send the message back to the same queue. When the count gets higher than 3, you do whatever error handling you want.
I guess the generall way would actually be to use the Dead Letter Queue feature. Configure it to test 3 times and us your application queue as a DLQ.
But don't try to put the bean to sleep (no thread code in EJB, and transactions will start to time out and god knows what's more).