I found the Wiki's page on subroutines quite confusing but the concept is very simple.
To tie together some posts, here are a couple of mine on the subject of subroutines. I've added some headers so you can see at a glance what they are about.
Q: What does a subroutine offer that you can't do just by having one macro call another?
A: A subroutine is a type of macro that provides an easy way to receive and return values with another macro directly, without always needing to use variables.
I also touch upon the general concept of subroutines beyond KM.
Q: Could you give a simple example of a subroutine in use with a macro?