Zwracasz *this, ponieważ typ zwracanej funkcji to referencja do obiektu. ;) Miej na uwadze, że w C++ praktycznie wszystko jest wyrażeniem.
Robi się w ten sposób po to, żeby możliwe były, np. takie czary:
s1 = s2 = s3; /* gdyby operator przypisania nie zwracał referencji do obiektu, nie
dałoby się w ten sposób przypisywać wartości do s1 */
funkcja(s1 = s2); /* funkcja(Stringbad &) pobiera jako argument wartość s1, która
jednocześnie przypisywana jest z s2 */
EDIT:
Dodam jeszcze zdanie, bo sądzę że mogło mi umknąć klarowne wyjaśnienie. Operator ten zwraca wartość po to, żeby po wykonaniu swojej roboty (przepisaniu właściwości obiektu) pozostawić w miejscu swojego wywołania 'kopię' tego obiektu do dalszych operacji (przykładowe takie operacje przedstawiłem wyżej).