A manually created contact must always be different than a contact created from a system user - this is by design. Contacts are used in many r3 apps for permissions / access. If new users would be merged with existing contacts based on things like names, a different person but with the same name would automatically get permissions that they maybe should not have.
But if you want this behaviour, there is an option in the app REI3 Organizations. You´ll find it under "Global settings -> User-Sync -> Assign contacts by email". If enabled, new users will be matched to existing contacts, if the email address matches. To clean up, you would delete the affected users and remove the undesired, duplicate contacts. Then, when you recreate the user (with email address), it will be assigned to the existing contact. As long as this option is enabled, this will continoue to happen.
Regarding duplicate departments (etc.). Department names are unique in the given location. If you have multiple of the same department name, then you should have multiple differently named locations in the same organization. To clean this up, make sure that your location names are consistent in your user details. Once they are, the corresponding contacts are moved to the correct location & department. Different lower/upper case counts as a different name - this is also by design. Make sure your data is consistent and it will work correctly. After your contacts were moved to the correct location / department, you can delete the duplicates.