I have managed to maintain a romance with both laezel and shadowheart through the whole game

The trick seems to be to get the Laezel fight to occur before you free the nightsong. If you leave camp immediately after the fight, shadowheart will want to speak with you. She will break up with you if you speak to her at that point, however, if you free the night song before speaking to her she will forget, allowing you to maintain romance with both until the end of the game. Pimpin’ ain’t easy but it sure is rewarding.