Unlike many languages which require the use of a text editor separate from the language implementation, a BASIC interpreter includes a text editor built in. Further, someone with e.g. a VIC-20, a television set, and the manual would have everything needed to make the computer do something (e.g. play the Tank-versus-UFO game printed in the manual). Obviously having a tape drive and a blank tape would make the system much more useful, but those merely augmented the existing functionality of the system.
I can't think of much else that could have been included in ROM that could have allowed one to do anywhere near as much with a "bare" system as one could do with a computer that had a built-in BASIC interpreter.
Based upon my limited understanding of FORTH or LISP, an important advantage that BASIC has over it is that unless one deliberately seeks to do so, one would be unlikely to produce a BASIC program which could not be recreated by recording the output of the LIST command and then typing in the program in question. Languages which treat programs as data that can be manipulated can do some very powerful things, sometimes in rather limited memory, but an interpreter may have no clue how a program was created in memory or what would need to be done to recreate it.
To illusrate the point using a REPL-based language I actually do know, in a Javascript console, if one does something like:
var a=[[1],[1]];
a[2] = a[0];
a[3] = a[0];
a[4] = a[1];
An attempt to serialize a
would list its contents as [[1],[1],[1],[1],[1]]
, but if one were to say, e.g. a[0][0] = 2;
on the original array, the apparent contents of the array would be [[2],[1],[2],[2],[1]]
, while doing it on a reconstituted version of the serialized array would yield [[2],[1],[1],[1],[1]]
.
In order for a REPL-based language to be suitable for use in a late 1970s personal computer, there would need to be a standard means of converting a program in memory to a serialized from. BASIC has such a means, but other REPL-based languages don't.