Deleting a server/module row that references packages and services starts to get a little complicated, as you have to ask what will happen to those child packages/services. We have scheduled CORE-209 for v3.2 that will determine how what you described gets handled, but it's currently not designated a bug; instead, an improvement.
Based on your example canceled service--even if you didn't have a service, you couldn't delete the server because it has a package associated with it. Uninstalling the module works (for now), but opens up problems with packages being undeletable. The solution we're leaning toward seems to be to unlink packages/services from a module upon uninstallation.