This is correct, you cannot trace dynamic data structure. This is not even a SystemC limitation, but limitation of VCD waveform dump in general. VCD does not allow to add/remove signals to waveform dynamically.
So usually you have two options :
1) If maximum capacity is known in advance and is small, you can create your own "list" that utilizes statically sized array as a storage:
bool has_value = false;
template<typename T, size_t MAX_SIZE>
std::array<my_list_item, MAX_SIZE> storage;
2) If maximum size is large or unknown, but it is sufficient for you to trace only head and tail of the list, you can have a copy of tail and head that is updated on every push and pop:
//... custom push pop