However, if the ticket is “sold out” and then the end sale date is changed then it is still showing on the ticket selector. Is there any way to change this so that they are instead “expired” and disappear as they did previously?
Is this for your custom built ticket selector that makes use of the API or the native ticket selector? If the latter, you can go to Event Espresso > Templates, then set Show Expired Tickets? to No, then click Save.