The hard part is that there is no way to know when the page is being rendered when the bound object can be released: it may be used zero, one, or several times while the page is opened, at any time the user likes.
Possible resolution: release the binding if no “ping” has been received from the rendered page for at least a minute; send a ping every fifteen seconds. Means creating some kind of Stapler adjunct and helper script and REST endpoint that lets the page send a short request to Jenkins periodically; Jenkins would keep a list of ping IDs and for each of these a list of bound objects.
In Jenkins Enterprise, merely opening the config page for a newly created freestyle job results in >100 RenderOnDemandClosure instances being bound, none of which are ever released.