This is all a matter of when the words "any other player" on Swamp Hag get evaluated. If a player's Lighthouse is in play at the time those words are evaluated, then he's not one of the players referenced by that phrase.
Pretend that, whenever you set up a future effect, you take out a notecard and write out exactly what it does. Then you keep the notecard around, following the instructions written on it as long as the effect lasts.
The incorrect way to handle Swamp Hag would be to simply write the words "when any other player buys a card, he gains a Curse" on the notecard, then, afterwards, whenever a player buys a card, check to see whether to follow those instructions by evaluating "any other player" and checking whether that player's Lighthouse is around at that point.
The correct way to handle Swamp Hag (i.e. the way that matches with the rulings) would be to first evaluate "any other player" immediately when the card is played, and then, based on that evaluation, write words like "when Alice or Bob [but not Carol because she had a Lighthouse when I played Swamp Hag] buys a card, they gain a Curse" on the notecard. Then, when Carol buys a card, she's still not on the list of players you wrote down on the notecard. You don't change the list just because her Lighthouse went away.
(It's comparable to the difference in MTG between an enchantment that says "Creatures you control get +1/+1" and a spell that says "Creatures you control get +1/+1 until end of turn." The former, (because it's generated by a static ability) continuously evaluates "creatures you control," so any new creatures you play get the bonus, and creatures that you stop controlling stop having the bonus. The latter determines the set of "creatures you control" at the moment it is played and applies the effect to those specific creatures; if you play new creatures, they don't get the bonus, and creatures that were affected and stop being controlled by you nonetheless keep the bonus.)