You are missing a few points here.
- Local variables (unless you want to fill your BP with temporary variables),
- access from other BPs with return,
- Events can be called and continued on with the execution without finishing its logic first but Functions are guaranteed to finish before continuing,
- if you have a compilation heavy logic which is used multiple times in BP, using functions will only compile it once (every instance of reused macros will get compiled increasing compilation time)
Also in case you don’t know, pure functions will get executed for every node it is connected to. Lets say I have a function with 5 return pins, each connected to a different node, its logic will get executed 5 times in single frame. So you shouldn’t use pure function if its return is connected to multiple nodes and is heavy to execute.
There are probably other advantages of functions which I’m forgetting or simply don’t know.