Inspired by #8569
Currently it's possible for a node to not send a VERACK and the only impact of this is that the code within VERACK will not be run, which is not desired behaviour.
The code behind VERACK ought to be just that - code that needs a verack to run. It may be that a variable be set which would avoid a disconnect after a certain time, for example, but so far this has never been implemented so effectively VERACKs have never been required for a connection to remain connected. The code should perhaps reflect this.