The main differences are in the formality/informality of these words, not really in their meanings. They all mean "to roam about (aimlessly)" and I will mention the small difference in nuance later on.
「ぶらつく」 and 「うろつく」 are more informal than 「さまよう」. The existence of the onomatopoeias 「ぶらぶら」 and 「うろうろ」 should tell you something about the colloquiality of the two verbs. Casually, you can say:
「[今日]{きょう}は[新宿]{しんじゅく}をブラブラした。」= "I wandered around Shinjuku today."
「TNはいつも[女子寮]{じょしりょう}のまわりをウロウロしているらしい。」 = "They say that TN is always hanging around the girls' dormitory."
You could replace the 「Onomatopoeia + する」 forms in the above sentences with 「ぶらつく」 and 「うろつく」, but you would sound VERY weird if you used 「さまよう」 because it sounds too poetic and/or self-important. In prose or poetry, 「さまよう」 is an excellent word to use but not in an everyday kind of conversation.
Finally, I will talk about the nuances. 「さまよう」 is usually used when wandering around a larger place like a city or even a country. You cannot さまよう around a house except in a poem or something.
「うろつく」, on the contrary, can only be used when hanging around a limited area like a block or even inside a house.
「ぶらつく」 sort of comes in the middle. You can ぶらつく around your neighborhood or even a city, but not around a house or a country.