SharePoint is a mixture of database and Asp.net, which may be confusing to newbies.In my opinion, its most important feature is: Template.
Most of the pieces of SharePoint are based on template mechanism: site column, content type, list, work flow, site, etc. This means, for each piece, there is always two parts: template and instance. For example, when we create a list manually, it always automatically inherits a content type to get the default data structure. After it is created, any change on that list will not affect the parent content type (parent template). And the changes of the parent template may or may not affect its children.
This is why so hard to change existing site structure through the site definition (adding new stuff is OK),
Keep this in mind, it will be much easier to handle the upgrade or change of existing customized functionalities on SharePoint platform.