If you wanted to pass a certain number of lines as arguments to a single invocation of command via GNU xargs you would run something like:
multi-line cmd | xargs -d '\n' -n N command
i.e. use \n as delimiter and pass N lines1 at a time to command which would be the equivalent of running
command line1 line2 ... lineN
Now, xargs operates like this:
input | xargs [options] [command [initial-arguments]]
which means whatever arguments xargs adds to your command line when building it up, they will come after the initial-arguments of command so e.g.
multi-line cmd | xargs -d '\n' -n N command initial-args
will execute
command initial-args line1 line2 ... lineN
which is why you won't be able to run
seq 1 3 | xargs -d '\n' -n 3 echo 4
and get the expected output because 4 will be considered as initial-argument and the end result will be
4 1 2 3
What you could do is invoke a shell to run command - that will enable you to position any additional arguments at the end:
seq 1 3 | xargs -d '\n' -n 3 sh -c 'echo "$@" 4' bang
1 2 3 4
What is bang in the above one-liner? sh -c syntax is
sh -c command_string [command_name [argument...]]
so 'echo "$@" 4' is the command_string ($@ expands to the positional parameters, in this case the ones added by xargs) and bang is the special parameter 0, the command_name (you can use any name e.g. sh)
Worth reading: Why $0 is not a positional parameter?
Note that my post pertains to GNU xargs and its exclusive -d switch. Alternatively, you could do it in shell, saving the output lines into an array and passing its elements as arguments to command before any additional arguments, so
e.g. with bash
readarray -t args < <(multi-line cmd)
command "${args[@]}" additional-arg(s)
or with zsh
args=("${(@f)$(multi-line cmd)}")
command "${args[@]}" additional-arg(s)
1: assuming those N lines fall within ARG_MAX limits