Yes; some stuff cannot be done in C. Start with loading SP. No way in C!
Some code in an RTOS is not possible in C. Look at the FreeRTOS sourcecode. There are bits of asm in there.
Also asm has great uses for protecting from optimisation (which can change silently by upgrading the compiler!). Asm never gets modified; essential when talking to devices needing specific minimum /CS timing etc.
Another example, for accurate delays (ST32F417, 168MHz)
// Hang around for delay in microseconds
__attribute__((noinline)) void hang_around_us(uint32_t delay) { delay *= (SystemCoreClock/4100000L);
asm volatile ( "1: subs %[delay], %[delay], #1 \n" " nop \n" " bne 1b \n" : [delay] "+l"(delay) ); }