In a D2D-enabled cellular system, not only can communications be relayed through the base station, but also closely located pairs are allowed to communicate directly over a D2D link, to support short-range data-intensive services. In this paper, we first formally state the problem of system throughput maximization subject to a given feasible lower bound for the users' SINRs in a D2D-enabled cellular system, and then propose a distributed joint power control and mode selection algorithm to address it. In our proposed algorithm, each transmitter with the potential of benefiting from D2D communications, selects its communication mode by comparing the effective interferences received at its serving base station and corresponding D2D receiver. Then, based on the selected mode, transmit power levels are iteratively updated in a way that the QoS requirements of all users are met, and the system throughput is enhanced as well. The simulation results show that our proposed distributed algorithm not only guarantees the minimum acceptable SINRs for all users, but also outperforms existing distributed schemes in terms of system throughput.