I believe they are all interchangeable in most cases, but in my opinion they have the following subtle differences.
Segregate - seems to imply differences between the things (often used when talking about racism)
Separate - seems to imply space between the things divided, as if splitting two things and putting them away from each other
Divide - kind of the universal word for splitting groups or things.