I'll try and answer your question about getting to St. John from St. Thomas.
The ferries leave St. Thomas either from Charlotte Amalie, or a little place called Red Hook. Red Hook is closer to St. John, so the ferry fare is less from there and the trip takesabout 20 minutes, but be sure factor in the time and expense of a taxi ride to Red Hook too. If the ship docks at Havensite Mall, taking a taxi to Red Hook and catching the ferry from there is an option, but if you have to tender in to Charlotte Amalie, the ferry should be close where the tender's dock and it will be a 45 minute ride to St. John.
It might be easier to take the Charlotte Amalie ferry even if the ship docks at Havensite, the taxi ride would be faster/cheaper, and its even possible to walk although its a good mile walk in the hot sun!
When you get to St. John, its not a far walk from the ferry dock to where the taxis are dispatched. Keep in mind these taxis aren't the usual yellow city car taxis, but more like the open air safari trucks at the Animal Kingdom safari ride. Since these are large vehicles, they usually like to wait until they have more than a couple passengers, so sometimes there will be a bit of a delay.
Its been our experience that the ferry ticket office won't open its window until slightly before the next cruise time. Last time I arrived at the ferry office around 1:15, hoping to buy a 2:15 ticket and go back to Cruz Bay and get ice cream, but they wouldn't sell tickets until around 2:00. (I waited at the dock, since it started pouring rain and the dock is covered!)
Here is a link I had bookmarked with the ferry schedules, I'm not sure if its the latest info, but it will give you an idea when they run:
http://www.st-thomas.com/week/ferries.html
I've always returned to Charlotte Amalie from St. John, I'm not sure how many taxis are available from Red Hook back to the ship.
I've never snorkled on St. John, but have been to a couple of the smaller beaches and to Trunk Bay, and always had a lot of beautiful and friendly little fishies swimming along with me.
A long explanation .... I hope it helps!