A panic in Go is a recoverable operation, but a surplus call to Done is often accompanied by a data race (which is undefined behavior, not a recoverable error). So I think it would be a mistake to define a surplus call to Done as a panic, since the panic is only defined behavior for a narrow subset of surplus-Done calls.
On the other hand, we have already made that mistake for the Add method, and Done() is equivalent to Add(-1).
Could there be any data race on the WaitGroup's memory as a result of calling public WaitGroup's methods? If not, and there is just a speculation that a surplus call to Done is accompanied by some data race somewhere around WaitGroup, but not WaitGroup itself, I find this is a strange justification for not describing what will happen if Done() is called several times. Similar argument could be made about any function: there could be a data race before the call to it.
Developers with Java background where extra CountDownLatch.countDown() calls are no-op, could call Done() mindlessly, e. g. in a loop, thinking an extra guard boolean variable is unnecessary.
Recently, not being aware that Done panics if counter goes negative I wrote the following code (basically I wanted to ublock main as soon as any of the goroutines exit) https://play.golang.org/p/3f_9iOk7GEY
If the docs were clearer on Done behavior, this would not have happened