Who decides whether a submitted share leads to a valid block or not? If a share does not lead to a valid block they would not require to be sent to the server?
Or is the only purpose of the share sent to the server to show that the client did some work?
Yes, shares are there to provide to the pool operator that you are working with the pool. Because you are actually hashing data and providing valid hashes of the data the pool sent, it proves you are working with them, meaning you deserve some of the sweet BTC reward when someone finds the actual answer.