Wireless Sensor Networks (WSNs) are commonly deployed in dynamic environments where events, such as moving sensor nodes and changing external interference, impact the performance, or Quality-of-Service (QoS), of the network. QoS is expressed by the values of multiple, possibly conflicting, network quality metrics, such as network lifetime and maximum latency of communicating a packet to the sink. A sufficient QoS should be provided by the WSN to ensure that the end-user can successfully use the WSN to perform its application. Current run-time reconfiguration approaches optimize only a single network QoS metric, focus on node quality metrics and/or consider a homogenous configuration. They thereby ignore existing trade-offs between important network QoS metrics, the need for nodes to collaboratively achieve the network QoS or heterogeneity in the network. We propose a distributed reconfiguration approach that actively maintains a sufficient QoS at run-time for a heterogeneous WSN in a dynamic environment. To resolve differences between the current and required QoS of the network, nodes reconfigure themselves by adapting controllable parameters of the protocol stack, such as the transmission power or maximum number of packet retransmissions. They take the opportunities of other nodes affecting the same network QoS metric into account. The behaviour of the reconfiguration approach and the trade-offs involved are analyzed in detail. With the use of simulations and experiments with an actual deployment we show that our approach allows a better optimization of QoS objectives while constraints are met, e.g., it achieves the same packet-loss with a significant longer lifetime, compared to current (re-)configuration approaches.