Actually, you can do both - just decide if the list is beneficial to the user even without your solution.
The easiest way is to delete the list in the feature receiver. I assume it was created automatically during your profile synchronization and contains no data created by the user. If the user wants to retract your solution they are not going to need the list anymore, aren't they? They could also back up the list to CSV/Excel for read-only purposes.
If you find worth to retain the list as-is after the retraction, you could divide your solution to two - one with the UI support (fields, CTs, ...) and one with the functionality. The user could retract the latter; the first they would keep as long as they want to keep the content.
Well, the idea of two solutions seems too complicated. Another possibility to retain your CT would be not tying it to a feature manifest. When you deploy a CT on a feature activation SP will remember it; you should not hack the SP configuration to untie the bond so that the CT remains. If you create you CT programmatically it will survive the retraction just as any other object deployed as content. (See also another howto.)