In St Thomas, do your shopping early in town (or accross from you pier at Havensight Mall). Go back to the ship, change and take a cab to Coki Beach or Saphire Beach.
Although Maegens Bay is bigger and more popular, it is crowded and the snorkelling is all but nonexistent. There are facilities at both Saphire and Coki(which is next door to Coral World, a paid underwater attraction. There is good snorkelling at either Coki or Saphire beaches ( and also unlike Maegens Bay there is no admission charge at these beaches). At Cki, facing the water , there are tons of fish to be seen on the right side (Coral World side) of the beach. There is a reef with some coral down the other end of the beach and just offshore.
In St Martin , do the same thing. Shop for an hour or two and then go back to the ship and change. Here I recommend Dawn beach. There is a restaurant/beach bar, a snack tent, chair and umbrella rentals. The beach is very family friendly attracting , cruise passengers, local condo and resort tourists and locals on weekends. Swimming here is great, snorkelling is OK. Best part you avoid everyone else going to Orient Beach.
Sharks. With Five Billion people living in the world and more than half of them living on or near the Ocean there are about 75 shark attacks a year. More than half of them are
reported in Florida and the Bahamas. 90% are swimmers at dawn or dusk (which is when sharks feed) or surfers . Most areas where you will snorkel are busy beaches
with clear water and sharks will not mistake your son for their dinner. I was told by a diving professional in the Virgin Islands that he had never heard of a shark attack in the over 25 years he has been diving in the Virgin Islands.
Relax, have fun and let your son have fun.