Generic ObjectCache with Expiration
IMO this a strange aproach. One needs to first call GetValue() to be able to set a value by using an eventhandler. I would expect from such an ObjectCache to provide a constructor which takes a value as parameter too.  

In addition I would add a property to ObjectCacheEventArgs&lt;T&gt; signaling a state, for instance an enum having the members ChangeValue, KeepAlive and SkipValue to be set by the handler of the event.
If this value is e.g set to ChangeValue then the _value should be changed. If it is set to KeepAlive the LastUpdate should be set to DateTime.Now. And for SkipValue you would need to add another var indicating that the value is skipped and set _value to default(T). 

It isn't obvious from a caller side of view that you have to add an eventhandler for that event. IMO this is a bad sign which one would maybe notice first at running the code. Such behaviour shouldn't be wanted and isn't expected. If one does not add an eventhandler he expects that he just don't get notified if this event happens.