I'm always afraid in case of list-manipulation that there was a duplicate in the past. But I do not remember.
You can try this:
Extract[list, Position[labels, #]] & /@ Union@labels
{{{1 ,2}, {-3, 4}, {-9, 1}}, {{5, 6}, {7, 8}}, {{-1, 3}, {0, 1}}}
and this:
Pick[list, labels, #] & /@ Union@labels
{{{1, 2}, {-3, 4}, {-9, 1}}, {{5, 6}, {7, 8}}, {{-1, 3}, {0, 1}}}
GatherBy
variation
GatherBy[Sort@Thread[Rule[labels, list]], First][[ ;; , ;; , 2]]
{{{-9, 1}, {-3, 4}, {1, 2}}, {{5, 6}, {7, 8}}, {{-1, 3}, {0, 1}}}