You can now opt-in to infinite TTL by specifying an expiry of -1 seconds when you queue the message. This is new with api-version 2017-07-29:
For the Queue service, the Put Message API now allows a time-to-live value in the messagettl parameter of over seven days. You may also specify -1 for this parameter to indicate that the message should remain in the queue until dequeued and deleted. The default value for this parameter is still seven days.
If you're stuck with an earlier version of the Azure Storage libraries, I solved this problem by requeuing old messages - once they were 6 days old, I added a duplicate to the queue and deleted the original.