Hi Neil,
The membership ticket end dates are calculated by the duration and for renewals the begin date is based on the previous end date.
Your proposed strategy of s stored procedure to run every day to reduce the duration seems reasonable, and probably should run as close to midnight GMT as possible. Might have a glitch on leap years that would need a one day adjustment.
I'll log this scenario in our project tracker in case I can think of a way to support this scenario directly in the product at some point.
Hope that helps,
Joe