First of all, when subscribe for a webhook notification, you can set the expireIns param to 630720000 seconds (which is 20 years) so it's kinda never expires.
If a webhook expired (Suspended status), you can use the webhooks renew API to renew it instead of resubscribing a new webhook subscription. Remember that the max numbers of subscription is 20 per account.
You don't need 2 webhooks X and Y to listen for an event when a subscription expires. Instead, when you set the expireIns param, you should remember that your webhook will expire after XXX secs, then either you can implement a timer to renew it, or periodically check the status of your webhook subscription (using the subscription id returned when you subscribe) to renew it if the status is "Suspended"
Lastly, why webhook expires? It is not a must feature by "standard", but it's really up to the services and service providers to secure and manage their resources. We do not want to keep sending out POST requests to services that could be no longer up and running or interested in receiving data.
So just simply set the expireIns to control your webhook subscription life time.