@ohwhatisinaname You sound like a very lovely friend who goes above and beyond to make things work and to maintain friendships that other people would probably let fade out for practical reasons.
The bride sounds like a high maintenance nightmare, and your friend who bailed at the last minute and appears to be happy to let you cover her costs doesn't sound great either. If I've understood correctly, you paid over a grand to cover that friend's costs, when split between the group it would have been about £150 each. Even if she's completely broke (in which case she shouldn't have been going in the first place) and you're very rich, she should offer to pay half, or pay you back in installments.
If the bride lives in NYC and the hen was in Mexico, I'm assuming that it wasn't as far away or expensive to attend for all the other hens, so it was a particularly big undertaking for you. With the benefit of hindsight, you should have just not gone, and said your annual leave allowance and finances just don't allow you to attend both the hen do and the wedding, and you would rather attend the wedding. But that ship has sailed.
I think you need to do some soul searching and ask yourself whether you really want to keep putting in the work to maintain this friendship. If the only way you think you can maintain it is to go to the wedding, which will cost you another two grand, is she worth that much to you?
Perhaps, after 15 years of friendship, you don't want to just let it end with the two of you having a row and freezing each other out.
Could you arrange to have a phone call with her to talk?
If you do want to try and preserve the friendship then I would probably start by asking her if she is OK, say that on the hen do she seemed incredibly on edge, and ask whether it was the stress of the hen do after her MOH dropped out, or the pressure of planning a big fancy wedding that is getting to her, or whether there's something deeper going on (like perhaps she doesn't want to get married but doesn't know how to call off the wedding at this late stage). Because if you feel sick about spending thousands on her wedding when you're not sure you even want to be her friend anymore, imagine how she might feel about the tens (hundreds??) of thousands she's spending on her wedding if she's not even sure she wants to get married anymore.
I would hear her out, let her vent about her hen do, her wedding, or anything else that's getting to her.
This is also her opportunity to say, "I'm sorry about the way I treated you, I was having a bad time but I know you made a huge effort and spent a lot of money to come, and I feel terrible about the fact that you felt the need to leave early."
If she doesn't spontaneously say that, or, worse, if she starts laying into you again, say something like this. "Look, I understand that you're under a lot of pressure right now, but I'm really upset about the fact that I spent over £2500 to fly to Mexico for your hen do, two months before I'm due to spend another £2000 flying to the US for your wedding, and you were really not very nice to me. I cannot help the fact that I get seasick and couldn't go on the boat. And we both agreed that someone needed to stay with the other girls and make sure everyone got back to the hotel safely. I am really upset about the fact that I spent so much money and effort to come, spent the weekend trying in vain to please everyone else, and got nothing but grief for it. To be honest with you I had a horrible time, felt really used, and am now having serious doubts about coming to the wedding. I really don't want to take more holiday and spend another £2000 to have another weekend getting the same kind of treatment in a different country. I love you and would be sorry to lose you as a friend, but I've already gone above and beyond for you and for this wedding, and this feels like a step too far."
Then see what she says.
If she values your friendship she will apologise profusely at this point.
If she doesn't, you know where you stand and can cancel the flight without the smallest amount of guilt.