I think that the easiest way to think about FeatureSource and FeatureLayer is the following:
FeatureSource is the class that deals with the access, the querying etc of the underlying data.
FeatureLayer is the class that deals with the drawing and displaying of the layer and it needs FeatureSource to access the data.
Most of the time, you don't need to worry about FeatureSource, if you just need to display a layer, do some spatial queries etc. All that can be accessed from the FeatureLayer. Look at the ShapeFileFeatureLayer for using ESRI shapefiles, for example. You can do everything you need with ShapeFilefeatureLayer.
But, if you have your own data type, then you would need to write the logic to access it etc, you would need to create your own FeatureSource and the FeatureLayer that would use it. I think that the best example for this is to look at the project OledbPointFeatureSource in the Code Community that shows how to access an Access database for displaying points representing capitals on the map. We created two classes OledbPointFeatureSource and OledbPointFeatureLayer and you can see how the two interacts.
code.thinkgeo.com/projects/show/oledbpointfeature
I need to tell you that I am not part of the core development team and I am giving you my take as a user of Map Suite. A more thourough explanation from a guy who designed the API would help too. And actually, we are working on that with having a better documentation that explain at a high level some key concepts. It will be in a Wiki type of format.