A List
is just a function which does not do anything besides being a container (well, sort of). In this way you can define you own "List function" with special properties, e.g.:
ClearAll[myList];
Attributes[myList] = HoldAll;
Then you can do:
l1 = {1, 2, 3};
l2 = {4, 5, 6};
List[l1, l2] (* Out: {{1,2,3},{4,5,6}} (clearly!) *)
myList[l1, l2] (* Out: myList[l1,l2] *)
func /@ myList[l1, l2] (* Out: myList[func[l1],func[l2]] *)
Is it this you have in mind?