Sometimes, there are subtle differences in the precise meaning of two synonyms, but many times they are just an artifact of our evolving language. The English language is in a constant state of evolution. You may not notice it on a day-to-day basis, but we certainly don't speak the same English today that Shakespeare used. Populations move around and bring their language with them. For instance, the British Empire colonized many distant lands and brought back many of their words.
We also make up our own words for things that already have a name. Look at all the different words we use for marijuana to disguise what we're talking about. The same is true of sex and body parts. People don't feel comfortable saying "penis", so if it comes up in polite conversation, they'll use something like willy, or peter. Some of these words stick, and then you have multiple words meaning the same thing. Fortunately, the English don't have language police to enforce the words we choose to use.