inline is mostly just an external linkage specifier now, for the reasons you stated.
So yes, it does have a use, but it's a different one than actually inlining functions. It allows you to define the same method multiple times between compilation units and properly link them together, instead of getting multiple definition errors.
//header.h
inline void foo() {}
void goo() {}
//cpp1.cpp
#include "header.h"
//cpp2.cpp
#include "header.h"
// foo is okay, goo breaks the one definition rule (ODR)
Actually forcing function inlining is up to the compiler, some might have support via specific attributes or pragmas or (__forceinline) or whatnot.
Simply put, it allows you to define functions in headers without breaking the ODR...