libvirtd --timeout 5 (wait forever, nothing happens) and there's even some other weirdness here: --timeout=1 can't be killed with control-c, and it hangs qemu instances launched to fetch capabilities info. So something is probably firing behind the scenes but not doing a complete job. --timeout=30 is used for autolaunching libvirt with qemu:///session, so this isn't entirely minor.
In current libvirt releases, any active resource will block shutdown. eg if you have any active storage pools, networks, or domains, it will be blocked. A directory based storagepool is the usual issue, since those can't even be de-activated. Upstream code has completely changed so that only domains prevent shutdown. The timeout=1/Ctrl-C issue might be related to the fact that startup of the virStateInitialize will still be taking place in another thread, which might be badly interacting with shutdown/timeouts. Upstream doesn't start the timeout until after initialization is complete now.
Seems long since fixed