Sounds like a generic list is what you need:
$list1 = New-Object 'System.Collections.Generic.List[String]'
$list1.AddRange([String[]]("a", "b", "c", "d"))
$list2 = New-Object 'System.Collections.Generic.List[String]'
$list2.AddRange($list1)
$list1.AddRange([String[]]("e", "f"))
$list3 = New-Object 'System.Collections.Generic.List[String]'
$list3.AddRange($list2.FindAll({ $list2 -notcontains $_ }))
That will do the same as your original script. Can you go into a bit more detail about your situation? Or will that suffice?