Well, if you call lstm(x)[0] you are using the output of the lstm layer, not its states.
nn.LSTM is a fully working layer, while nn.LSTMCell is only a single cell.
What are you missing? If you have some TF code you would like to port to PyTorch, feel free to post it, and we can have a look at it.