Interface and implementation of this replacement for Rebol/Red REJOIN
Some thoughts:

Initialize String

unless into [
    out: make string! 10
]


Don't know how else to discern the initial string allocation, perhaps just start with zero?

OUT might be a strange word for a value that is both input and output. I'd also allow a NONE! value here.

/input out [any-string! none!]


Then you can initialize like:

out: any [out make string! 0]


Delimiter

if block? delimiter [
    delimiter: combine delimiter
]


Cool, a delimiter can be combined on the fly!

needs-delimiter: false
pre-delimit: does [
    either needs-delimiter [
        out: append out delimiter
    ] [
        needs-delimiter: true? with
    ]
]


Rather than an extra function and an extra value for this, why not just an extra value:

active-delimiter: none


Then set active-delimiter to delimiter after the first step through BLOCK.

Iteration

while [not tail? block] [
    set/any 'value do/next block 'block
    ...
]


I'm not certain about this, but I believe FOREACH is faster than WHILE. This seems like an inefficient way of expressing:

foreach value reduce block [
    ...
]


Functions

function? :value
closure? :value


Are you just testing for these two types of function? Otherwise ANY-FUNCTION? would catch both.

Throwing Errors

throw make error! "Evaluation in COMBINE gave function/closure"


I don't think this works in Rebol 3, at least not without wrapping the function call in a CATCH block. As I understand it, you need to DO an error to trigger it.

Coerce Output Type

An /AS refinement might be a good way to do this, so long as the type is with the ANY-STRING! typeset. It'd be a close call as to whether /INTO or /AS would take precedence for output type:

type: any [type string!]
out: any [out make type 0]


None/Empty

My opinion here is:

combine []
combine [none]


Should return ""

combine/with [none none] ","


Should return ","