There are no arrays in batch files, per se. What you have there is just a collection of environment variables with the same prefix. There's nothing special about that.
How to pass them to a command depends on the command (e.g. are they space-separated, i.e. individual arguments, or comma-separated, or something else entirely?). You need to create a string from those variables that matches the format the program expects, e.g. when they should be space-separated, create a string the following way:
setlocal enabledelayedexpansion
for /f "delims==" %%A in ('set dnslist[') do set List=!List! %%B
wmic nicconfig where macaddress=somemacaddr call SetDNSServerSearchOrder %List%
Likewise for different delimiters. Delayed expansion should ideally be enabled at the very start of your script; no use creating a new local environment in the middle of it, usually.
If you want to call the command once for every entry in your "list", you don't need to create the delimiter-separated list in the first place, but rather just call the command directly with the entry.
     
    
xof array elements:for /L %%I in (1,1,%x%) do wmic ... !dnslist[%%I]!(with delayed expansion enabled); in case you do not knowx:for /F "tokens=1,* delims==" %%I in ('set dnslist[') do wmic ... %%I...