I applied freeze sending. I then tried to force-close it but it failed: "bad-txns-inputs-missingorspent"
Any pointers?

If the locktime (
height or time) is still not reached, the error message alongside with the server error should be "
non-final".
That looks like a missing input error which was caused by trying to double-spend a already spent output;
Can you check your wallet for possible closing transaction that wasn't labeled?
Paste the "
open transaction's" TXID (
in a block explorer) and check the non-change address output if it's already spent.
Also check if it was sent to one of your own wallet's addresses.
How come the channel status keeps saying "reestablishing" after so long without automatically unlocking it??
If it didn't see a confirmed closing transaction, it won't transition to "
Closed" but rather stay "
Open"
and "
Reestablishing" is a state based from the other peer of the open channel, means the channel is open but trying to re-connect to the other ln node.