Try to add to the list not a reference to Range but its value (text):
var list = new List<string>();
foreach (Range range in doc.Words)
{
list.Add(range.Text);
}
or shortly:
var list = new List<string>(doc.Words.Cast<Range>().Select(r => r.Text));
So now you can manipulate strings without referencing VSTO objects.