The encoder outputs ARE the hidden states at each time step. Look at the following sketch of an LSTM cell:

1024px-The_LSTM_cell1024×672 75.5 KB

There is not “extra” output, it’s just the current hidden state h_t. For example, if you define an lstm with num_layers=0 and batch_first=False, and given, say,
output, (h, c) = lstm(inputs, hidden)

then output[-1] = h_n, simply meaning that you can get the final hidden state directly from h or as the last hidden state from output. If you have more layers (num_layers>1), things are a bit different: output will contain only the hidden states for each time stamp after the last layer, while h will contain the last hidden states for each layer.