What is the difference between DEFeatureClass and IFeatureClass?
First a short explanation of Interface vs. Implementation: DEFeatureClass is a CoClass ID, meaning it is an implementation of IDEFeatureClass. In COM, interfaces are separated from implementations. To get a DEFeatureClass, you must first declare an instance of IDEFeatureClass and use that to get DEFeatureClass.
Now, onto what the DEFeatureClass is: The DEFeatureClass is the data element for your feature class. A data element is the metadata for the feature class. It contains only read/write properties that describe the feature class with no methods. It's purpose is to store and retrieve information about the feature class. Notice that you can change various properties describing your feature class from here as all of the properties are read/write.
An IFeatureClass is used to control the behavior of the feature class. It does things with the feature class versus simply storing information about the feature class. Notice in the documentation that this object includes various methods that you can execute on the feature class, such as DeleteIndex, DeleteField, FeatureCount, etc. However, it also contains information about the feature class, albeit in read-only (get) format. Notice in the link that properties describing the feature class, such as FeatureType, are all read-only.
Which should you use, and why?
See comments below. You must use DEFeatureClass. The link you provided in .pdf describes the different data types that correspond to the feature class. The only one that is relevant to you is the DEFeatureClass.