I spent a while this morning reading up on memory related issues in Unity3d. There is a fair bit of info available, even a Gamasutra article series on the subject. (Google Gamasutra Unity memory).
Anyway, I am probably revealing my age here but strictly speaking I would not call the issues "memory leaks". In older languages (C/C++ etc) memory leak was a situation where you failed to deallocate something and that memory was then "leaked" and you could never retrieve it. If you did it enough your application would crash. Period.
The issue at hand here is that that certain practices will allocate things on the heap where they need to be garbage collected. So they will be taken care of and you will get that memory back. However, garbage collection - especially the type apparently used by the mono version Unity uses - can be slow. So if you use "leaking" practices too much your game will likely stutter when the garbage collection kicks in. Sure it can crash too if you manage to leak too much memory before the GC has a chance to fix this, but you would have to be really careless IMHO.
I knew about the garbage collection problem, but I did not know that foreach and Ienumerable could add stuff to GC. Fortunately, the only places where we iterate lots of stuff using either method is in bigger operations that happen seldom and are user initiated. And we do call GC as well as Resource.Unload-whatever-it-is-called after (and sometimes during) these operations.
When running the game proper where fps is important we iterate using regular for loops and seldom do any fancy stuff. I think we may start a few coroutines sometimes so that is something I have to look at (that apparently causes overhead too - more than expected).
My take on the whole issue is that unless you are careless this is not much to worry about. I would advise to write nice code using the tools available (even if that is a foreach, coroutine, Linq etc.) and get it to run. Then profile and focus on the areas that truly are a problem. If you are smart and use the tools wisely you can most likely get a nice, well running game without having to do many .net workarounds if any.
Please note, that this is in no way criticism towards Aren or his implementation of TNet.List etc. I have not looked too much under the hood, but in frequent use (as I would suspect is the case in TNet) foreach, heavy list manipulation etc. *would* make a significant difference. So the custom version makes perfect sense. However, it may not make sense to rewrite your code to use it unless you will be relying on lists heavily many times / second.
Oops. Sorry for the length. Hope it may help someone.