An unhappy vttablet is one that is at whatever limit to which the -degraded_threshold is set. An unhappy vttablet will still be serving queries. 


vtgate will always prefer happy vttablets over unhappy vttablets, however if all your vttablets are unhappy then it will serve all of them. 


To make sure that your vttablets are reporting their replica lag you need to set the flag -enable_replication_reporter.  With that flag set vttablets will transmit their replica lag to vtgates allowing them to balance load better. Enabling this flag will also cause vttablets to restart replication if it's stopped, as long as the flag -disable_active_reparents isn't set.