List Variables don't have a character limit, each individual item has a 255 character limit.
https://experienceleague.adobe.com/docs/analytics/implementation/vars/page-vars/list.html?lang=en
So you should be fine to list all your coupons.
As for s.products... don't let the "box" define you... I use s.products for 20 different things... only one of which is product related 🙂 I use the "category" part of the products notation to indicate the usage.. so in this case, I would start all the coupon "products" as "coupon".
My uses include Newsletter Signups (so I can use the merchandising eVars for information such as newsletter name, id, newsletter category, etc), I use it for our Subscription Wall impressions and clicks (where I use different mechandising eVars to track the rule name, rule id, offer name, offer id, type [hardlock or meter lock], etc), I use it for our "Reader's Choice" voting (where I use Merchandising eVars to track the voting category, the business name, id, the person if it's a person level vote etc, I use it for our A/B testing (where I track the test identification, the variant that was in use, etc), and I use it for our subscription purchase flow (tracking the service id, the type of purchase, the discount used if any, etc)
Just because its call "products" and someone decided it should be used in one way, the structuring of being able to stitch Merchandising eVars and events is so powerful that I won't limit myself to just one type of data.