Regarding (1): Yes, everything is handled under the hood of PyTorch. If embedded_sents in self.recurrent_layer(embedded_sents, self.hidden) is the batch of the complete sentences, self.hidden will be updated and re-used time step by time step. If for some reason you want to intervene at each time step, you can given self.recurrent only sequences of length 1.
Regarding (2): Yes, if your batches are independent, you generally reset self.hidden before calling foward() on the next batch. You can have a look for that in some code of mine 57 for an RNN-based autoencoder. Check the method init_hidden(self, batch_size) and where it is called.
I hope that helps.