What you wrote is a little confusing, but from the code you've included it appears that this isn't about broken references, this is about incorrectly setting the value of $id.
If you do the following:
<<set $abc to 2>>
<<set $id to "$char" + $abc>>
then $id won't get the value of $char2, it will get the value of a string with the text "$char2" in it. The .includesAll() and .includesAny() methods only work on arrays, but you're actually trying to use them on a string.
Rather than using multiple arrays, you should probably be using a single array of arrays, like this:
<<set $char = [ ["A", "B", "C"], ["E", "F"] ]>>
(The extra spaces between the brackets are to prevent Twine from seeing that as a passage link.)
That way $char[0] would hold the array value ["A", "B", "C"], and $char[1] would hold the array value ["E", "F"].
Then you'd just do:
<<if $char[$abc].includesAll($enemy)>>
MAX BONUS
<<elseif $char[$abc].includesAny($enemy)>>
BONUS
<<else>>
NO BONUS
<<endif>>
if you wanted to see if those arrays contained all or any of the elements in $enemy.
If you need to access the individual elements, you would just do something like $char[0][1], and in this case that would return the string value of "B".
Hope that helps! :-)