First of all, I agree with ataradov, with one addition:
SoC (System on a Chip): a microprocessor with all or most I/O integrated onto a single chip, the only external thing needed is usually DRAM, though that may also be internal, typically as multiple chips in a single package aka SiP.
Also, microcontrollers don't usually have an external memory bus. Any microcontroller with a sufficient number of GPIOs can of course have some of them configured to control and access external memory in an explicit way by having the program manipulate some IO ports as addresses and data. Some, such as the ATMega2560, allow normal memory addressing to be used to access such external memory, even to run code from it, but usually at a speed penalty. The 8051 also has such external memory, but modern versions of it incorporate the "external" memory on the chip itself, thus completing a circle.
There are a number of devices that incorporate all or most of the functionality of a computer in a single chip. There are PIC chips which can be programmed at a low level (machine code or assembly). Then there are various single chip devices that incorporate some kind of higher level programming like Basic or C.
I've never seen a microcontroller that "incorporates" C programming. The chip runs a binary machine code. You can write and download the program of your choice into the EPROM or flash on the chip, where it is stored permanently (or until you overwrite it).
The program you download is typically written in assembly language or C (or increasingly, Rust) but by the time it gets sent to the microcontroller it is binary machine code.
The program might do any number of things (infinite variety), but one option is to implement an interpreter for a language such as BASIC or MicroPython which you can enter code for interactively via a serial interface. Extremely simple languages such as FORTH or Scheme might compile the code you enter interactively into machine code which is then stored in RAM (or flash).
And there are single board computers that incorporate one of the above as well as the memory, various forms of advanced input and output, and on board sensors and readout devices (from single LEDs to displays).
I would not call something an SBC unless a significant amount of RAM (enough to run some kind of operating system and capacity to self-host a proper compiler), and some kind of mass storage with a file system. The boundary is a bit fuzzy. Now days people expect Linux and tens or hundreds of MB of RAM and hundreds of MHz of CPU clock speed. But a 1 MHz Apple ][ or C64 is of course an SBC and those only have 64 KB RAM.
Boards which merely bring the pins of a microcontroller out to convenient sockets or LEDs etc are not SBCs.
And sometimes part or all of this advanced functionality is incorporated in the single, central controller chip which is the heart of the single board computer.
would a Propeller chip or a Basic Stamp or an Arduino or a Raspberry Pi or a PicAxe or any of the others not be called a microcontroller?
Raspberry Pi is certainly not a microcontroller. Far too capable.
May BASIC Stamp burn in hell. What an awful thing! I'm so glad Arduino saved us from that. I hadn't heard of Propeller, but I see it's from the same company. Hardware threads are an interesting idea that have their place. But fixed-length 32 bit instructions and an interpreter in ROM for "more compact" bytecodes for "Spin" is just a terrible idea. Well designed modern RISC instruction sets such as ARM's Thumb and RISC-V with the C extension are more compact than any bytecode I've seen, and run at full speed.