You can plug any "Mcufriend style" parallel Shield into your Nucleo.
TFT_eSPI supports 8-bit Parallel and it supports many 320x480 controllers.
e.g. ILI9481, ILI9486, HX8357, ST7796, ...
MCUFRIEND_kbv works out of the box with every "Mcufriend style" parallel Shield on a Nucleo. i.e. it supports more controllers than TFT_eSPI. But TFT_eSPI is more sophisticated and probably faster.
As I said. I don't have the Waveshare Shield. It is definitely convenient to plug a Shield into a Nucleo. I would expect it to run pretty fast with TFT_eSPI. So I am wondering what you have done in your User_Setup.
Run the Read_User_Setup.ino sketch. Copy-Paste to your message.
Don't remove code from the examples. Just run the library examples in their virgin state. Then we can replicate your setup (if possible).
It is unfortunate that I do not want to buy a Waveshare. I can probably test most other display types. (on AVR, Due, Nucleo, Teensy, ESP8266, ESP32, RPi Pico, ... targets)
Regarding Red SPI displays and Shields. I mount headers and solder wire routeing on a custom ProtoShield. This means that I can run different displays on different targets.
You will see that most of the Display contributors have similar arrangements. i.e. Protoboard or ProtoShields that receive the popular TFT, OLED, GLCD, ...
Incidentally, the Nucleo-64 has pretty good functionality on its Arduino headers e.g. SPi, I2C, UART, PWM, ADC, ...
This does mean that mapping an 8-bit databus goes to random Port pins.
Less efficient than say PORTA on a Mega2560 but works well on an M4 target like your STM32L476