1) If the service is cached, use the tiled layer, else use the dynamic.
2) Use Identify and make sure you set the width/height and extent properties to Map.ActualWidth/Height and Map.Extent. That way it will automatically return the state/county/etc based on what's currently visible.
3) If you need to highlight the feature, add the returned geometry/graphic from the Identify result to a graphics layer.
As you mentioned in step 2, you always query the state layer, so naturally you would never get the other layers back in your query. If you want to use QueryTask for this, you will need to change the endpoint you are querying based on the current resolution/scale.
That's why I suggested you instead use the IdentifyTask instead because this will automatically only query the layers that are visible at a specific scale.