I think that's a very very fair solution to me. I've had a few long stay guests cancelled reservation before and I refunded most of the money basically due to the fact that my listings get rebooked pretty easily and frankly series of short stays make more money for me than those long stays due to the discount.
My approach was slightly different than yours that I usually offer them two options. First option is that we'd go with the cancellation policy first and then whatever we recover from the rebook of those nights will be refunded. The other option is to charge them a cancellation fee (usually 10-20% of the total) and make it a done deal. They agreed on the long term cancellation policy so I wouldn't let them quit for free, but it's also emotionally insane to hold thousands although it's perfectly legit based on the contract. One thing to note is that I usually judge the solution based on the fact that how many days ahead they tried to cancel. If it's one month, or at least two weeks, ahead I would be nice to them. However I don't like to bear last minute cancellations so if they cancel last minute, 3-7 days from the time of the cancellation would be non-refundable for sure.