I've faced such kind of issue recently. I tried removing global W, but this didn't work for me. However, I've found a solution.
The point is that we use Backbone.js framework in our project. it is an MVC framework which separates it's views from other componenets by creating something like virtual scope for each view.
Therefore I simply included initialization of windy into one of the views. When I need to start windy I create the view and render it on the page. After finishing working with it i dispose the view by calling it's unbind() and remove() methods. Seems like this operations somehow manages to clear the page's scope from all Windy's records.
When I am to show the forecast map again I initialize the view again and render it as it has never been created before. The map is been created succesfully and without any significant redundant artifacts like we all got used to encounter.
Hope this helps. If somebody is interested in any further details or examples, please contact me via email firstname.lastname@example.org.