That's because FOR/F splits a each line into multiple tokens, but you need to define how many tokens you want to process.  
set var="1 2 3"
for /F "tokens=1-3" %%i in (%var%) do (  
  echo %%i
  echo %%j
  echo %%k
)
EDIT: Other solutions
Like the answer of Ed harper:
You could also use a normal FOR-loop, with the limitation that it will also try to serach for files on the disk, and it have problems with * and ?.  
set var=1 2 3
for %%i in (%var%) do  (
    echo %%i
)
Or you use linefeed technic with the FOR/F loop, replacing your delim-character with a linefeed.  
setlocal EnableDelayedExpansion
set LF=^
set "var=1 2 3 4 5"
set "var=%var: =!LF!%"
for /F %%i in ("!var!") do (  
  echo %%i
)
This works as the FOR/F sees five lines splitted by a linefeed instead of only one line.