If you remove the implicit uint==>int assignment from D you have to add many cast() in the code. And casts are dangerous, maybe even more than implicit casts.
On the other hand I have not tried D with such change, so that's just an hypothesis. And maybe a library-defined toSigned()/toUnsigned() are enough here.
Bye, bearophile