Caveat that most of this is undocumented and just my observations:
Some background - when a user subscribes to an in-app product for a channel, it generates a transaction id. If they cancel and resubscribe later, even many months later, the purchase will still have the same original transaction id.
Since the user already purchased the product this month, indeed, you cannot sell it to the user again in the same month. The user would be buying the same exact thing twice. The only way around this is to wait until the expiration date passes to offer the product to the user again or instruct the user to resubscribe within their subscriptions page: https://my.roku.com/account/subscriptions
Note that if you are using webhooks, this will not generate a webhook. This makes tracking user subscription state for these edge cases tricky.