The reason is that the use of a concrete List<T> is meant to be an implementation detail, and you're meant to expose something more abstract, such as IEnumerable<T> or ICollection<T>, that represents only the functionality you want to expose (such as being enumerable, mutable and/or indexable).  This gives you flexibility to change the implementation later on.
In practice, this warning is often resolved by returning IList<T> instead of List<T>, but the idea is to prompt you to think about "what functionality do I actually need to guarantee my callers?"  E.g. maybe I should be returning IEnumerable<T> or ReadOnlyCollection<T> because I don't want my callers messing with the returned collection.