That's not to say that doing so will necessarily be difficult, that will depend on what degree of coöperation or synchronisation between the tasks is required. Such inter-task communication is likely to be easier when they are running on separate threads (which share memory) than in separate processes (which don't).
BBC BASIC could in principle be made multi-threaded if one specific requirement was met: that two key global pointers (the pointer to the currently-running program and the stack pointer) are guaranteed to be held in registers - which are specific to a thread - rather than in memory - which isn't.
And indeed in the versions of BBC BASIC written in assembly language (e.g. BBC BASIC for Windows and the 32-bit x86 editions of BBC BASIC for SDL 2.0) and the versions compiled by GCC (e.g. the Linux and Raspberry Pi editions) those global pointers are guaranteed to be held in registers.
But - and this is where the annoyance arises - when compiled by Clang they are not. Although Clang is by design highly compatible with GCC, the specific feature which allows you to put global variables into registers is not implemented. This omission has been much discussed over the years but it seems unlikely ever to be resolved.
Unfortunately Clang is used to compile the MacOS, Android, iOS and in-browser editions of BBC BASIC, which rules out multi-threading on those platforms. I did try telling Clang to make the pointers thread-local, in the hope that it would realise that the easiest and fastest way is to keep them in registers, but instead the performance plummeted.
So there we have it. Some of my current versions of BBC BASIC could in principle be capable of multi-threading, but others can't.