Given the freedom to reboot, it's clear to me that
the behavior that would be both consistent and
useful would be for

    lreplace $list $first $last $new1 ... $newN

to find the same range of existing elements specified
by

    lrange $list $first $last

remove them and in their place insert $new1 through $newN

In the case where the element range to remove is empty,
insert the new elements at the position identified by $first

No errors for any syntactically valid indices.

Would be a big change around the edges though.