There doesn’t appear to be any mechanism to disconnect from nodes without stopping and starting bitcoind.
The “addnode” RPC call has a remove function but this appears to just remove the node from the list of addnodes, without disconnecting from the ‘misbehaving’ node immediately.
It is also a matter of network optimisation as marginal connections with distant nodes can lead to an increase in traffic due to resends, repeated requests, etc. If poor connections can be easily dropped, the good connections can come into majority. Some simple decision code to drop misbehaving nodes (high latency) can be added to a call to disconnect to achieve better network wide connectivity.