There are a few reasons, but primarily this separates system objects from user objects. In case of corruption, or the need to restore a filegroup instead of the entire database, you can do that.
I haven't typically done this in many smaller databases (< 100GB), and not sure I would. It adds a little complication and confusions when most of the time this doesn't affect how smaller databases work.