An excellent question... and a perfect one for the isotopic/atomic era. 
(I've called this SPLICE, which I prefer... although really something like CONTENT OF is probably more generic when applied to things like FIND or PARSE. find [a b c d] content of [d e].)
We could have isotopic blocks, and call them "splices".
Functions that took normal parameters would raise errors if you tried to pass them one, but ^META arguments would be able to process them (received as plain BLOCK! vs. a quoted BLOCK!)...and we'd make APPEND and friends take their arguments as meta.
Isotopic blocks don't exist today (though they'd be trivial to add, they're just BLOCK! with a quoting level of -1). But as an approximation of them I can paste into ReplPad right now, we can slip the signal into "isotopic errors", e.g. definitional "failures"... which only some functions would be receptive to:
spread: func [x] [
return fail make error! [ ; "definitional" FAIL
message: "uncaught spread"
id: 'spread-signal
arg1: :x
]
]
append: func [series ^value [<fail> <opt> any-value!]] [
either error? value [ ; a failure (normal ERROR! to ^value would be QUOTED!)
if value.id != 'spread-signal [
fail value ; "non-definitional" FAIL, raises error normally
]
value: value.arg1 ; argument to spread, not quoted
][
; leave quoted otherwise (non-isotopic values get quoted by ^ on value)
]
return lib.append series value ; quoted values appended "as-is"
]
The effect might seem like you could have done this in historical Redbol with TRY/EXCEPT...
>> append [a b c] [d e]
== [a b c [d e]]
>> append [a b c] spread [d e]
== [a b c d e]
But no, it's a direct relationship via the output piped to a ^META/<fail>
argument. You don't get undesirable effects from arbitrarily deep stacks:
>> append [a b c] reduce [spread [d e] 1 + 2]
** Error: uncaught spread
And that, kids, is why definitional failures are so awesome! 
(I'll add that definitional failures do not require triggering a longjmp or C++ exception, though you do incur overhead from creating the ERROR! object, of course.)
Anyway there's a proof of concept. But isotopic block splices would be much more efficient, and make significantly more sense.
It would seem to have virtue over ONLY and is a better word.
So my perspective was at one time informed from having tried a lot of approaches...and I've gone through so many times of re-rigging the entire code corpus it's sort of maddening.
When I did, I was surprised to find that splicing as default intent was a rhythm I preferred. It's been a while since I've done it...and I probably should have taken better notes on exact cases that made me feel that way.
(UPDATE: going through with the new proposal showed me that the cases that feel the biggest bummer to change are with literal blocks, e.g. append file-list [%foo.txt %bar.txt]
. There's a bit of a negative feeling when having to change that to APPEND/SPLICE. I think this negativity is less when it's not a refinement, so append file-list splice [%foo.txt %bar.txt]
... and maybe we could come up with a symbol for this. But having looked at this so long I think it's just right... and if you want to make that cleaner you can make a gathering construct local to the function called ADD (or whatever) that specializes it all out to just add [%foo.txt %bar.txt])
Maybe my feelings are outdated and I should reevaluate it in light of these isotopic blocks. I think so. It's a systemic solution that would apply across the board (e.g. in COMPOSE).
splice: func [value [any-block! any-group! any-path! any-tuple!]] [
return unmeta as block! value ; isotopic, e.g. "quoting level -1"
]
Maybe things need to be controlled by refinements... like which things you want to splice or not. Maybe it's an arity-2 function... splice block! value, splice [block! any-path!] value. There could be variations...build your own...use symbols. Maybe skippable @ parameters... like splice value vs. splice @block! value or splice @[block! any-path!] value
(Point is it's something you could write in usermode, and design the behaviors creatively... functions that sometimes return a block isotope, and sometimes don't.)
I'm warming up to the idea by realizing that we basically are already having to make APPEND & friends act like they take value as ^META anyway...so...might as well make it official.
Either way, no use rushing at this point!
Better to get it right.