You should use DataEvents<T>
To detect changes changes to public data of a specific data type you can take two routes:
If you don't need to know exactly what items was changes, just that they were of a specific type (like IPage) use the DataEvents<T>.OnStoreChanged event.Your handler will get a StoreEventArgs which expose PublicationScope - info on whether this was a change to public data or not.
If you need to know what exact data was changed you should use the other events on the DataEvents<T> class. They give your handler aDataEventArgs instance which expose the data item. You can then examine PublicationStatus on the item to determine if it is published or not.
Some sample code on hooking up events and consuming them available in this thread.
Important note: the OnStoreChanged event was introduced in 4.0.
It would be really awesome if you shared info on your lucene.net integration - like a blog post or a c1 package - I'm sure lots of people would love to use what you are building :)