One solution is to throw an error. Another solution is to produce a warning, allowing the multiple bindings, but letting the user know that it might be a bad idea. Yet another solution might be to throw the error, but introduce a new binding form into the language (perhaps with* or mültiwith) that allows this kind of re-binding to occur.
There are no right answers. We are talking about the design of a language, and to that end, we have not actually defined what our goals are. Who are our users? To what uses will they put the language we are implementing? Will it be for systems programming, or web scripting? The questions are many.
There are several essays that I would like to ask you to read. They are not highly technical unto themselves. I will introduce each of them briefly.