My experience:
I am holding H-1B, I have been flying and driving to Canada more than 10 times using automatic revalidation rule (30days). In June 2006, I went to Mexico for a meeting:
1. In airport, airline company would not check me in because i had no valid visa back. I showed them the DOS document and explained to them, finally their supervisor understood and checked me in.
2. No problem entering Mexico.
3. When I came back, the airline would not check me in in Mexico because no valid visa stamp. I explained again and finally got through.
4. when I enter US cutoms at Atlanta, a black officer would not let me in. I explained, he called his supervisor. His supervisor only took 5 seconds to look at my documents and said it was perfect with no problem. The black officer let me in and said "take care, bro".
My suggestion;
1. It is definitely the fault of cruise line. It is their responsibility to be familiar with US laws.
2. You have to call their company, high level customer service or VP or even CEO, and record all your effort. Nice way, they should arrange a same trip for you for free. They should appologize too.
3. It depends on your style. If it were me, I will warn them that I will sue them. And I will gather all the documents at the same time. You really should ask them to give you a written notice why they denied your boarding. you can record if necessary (tell them you will record and sue them later). Ask the person's name who denied your boarding. if really file a law suit, you should ask for compenstation of all the time, effort, and spiritual hurt. With the DOS document, you should have 100% chance of winning, but again, you need evidence. Go back and try to replicate the deny process if possible.
contact some lawyers to see if they will do the case.
Example in real life, one of my former colleague, (white female), once went back to McDonald to return an unheated apple pie (store forgot to heat) and tried to record store manager's name, and was grabbeed store manager of the wrist. McDonald HQ called her immediately after one day, and apologized and offered compensation, they started from $250k, and went up to 1 million final offer. My colleague accepted 1 million offer and received check after two weeks!!!!