ResettableLazy: a resettable version of .NET Lazy
Overall, it looks good to me.  There aren't any real threading concerns with simultaneously resetting and accessing the value.  The body of the Value property getter will either use the old _lazy or the new _lazy, but those are the only options.  Since there isn't any locking it is possible for one thread to continue to see the old value after another thread resets (due to caching a value of the _lazy reference), but this is likely not a problem in most use cases.

One thing to note is that if Lazy&lt;T&gt;.IsValueCreated ever becomes true it stays true for the lifetime of the object, and this is not the case with your class.  It's worth calling out that if the object is shared between threads than many of the reasons to use IsValueCreated become less reliable (e.g. accessing .Value may be expensive).