I believe I may be able to shed some light on this. (Big maybe)
It is my personal opinion that Princess has their res system set up with a common customer-facing interface...which just happens to show a *max* of 20 available seats. Yes, of course most (many?) excursions can handle many more people. I believe what is taking place behind the scenes is that their "behind-the-scenes" database is pre-loaded with the maximum number of seats. This counter is decremented until it hits 19 left available...and then you start seeing "There are only xx seats available remaining". I have personally seen this on at least 2 occasions. I always make note of that count before I book. I have booked with it showing "20 seats remaining" and even by the next day, it *still* showed "20 seats remaining". Only at some point in the future would it start decrementing.
I retired from IT. While I was not directly involved in web programming, I could always see the type of code that was being used...and any time a bit of code could be "re-used" for more than one thing that's what would be done. Why re-invent the wheel? So...you code for a generic situation and let the circumstance "drive" what the customer/user sees.