Sorry for self-responding, but I found further information in Sec. 5.1.4 ("Encapsulating several messages") of the OMNeT++ manual.
In fact, the example provided there ("insertMessage" and "removeMessage" using std::list) is very similar to what I did with cPacketQueue, but I wonder why we have to take the ownership of the encapsulated messages here. It seems that they may be needed for copy and duplication operations. Otherwise, is it ok to not take the ownership here?
As I said before, due to the complexity of related definitions and implementations (not just simple inserting and removal, but true encapsulate-like operations including automatic handling of length, copy, duplication, ...), I do hope that this extension of encapsulation/decapsulation to multiple messages will be integrated to the OMNeT++ itself.
Regards,
Joseph