If I may be so bold SS, There are a couple things that I notice from your pics. Mainly because through trial and error, I have had similar results.
It looks like the onion wasn't quite worked enough to be supple to form the bhaji properly. Hence the very loose make up of the bhaji itself. It is very hard to explain without showing someone but once worked, the onion becomes pliable enough to be gently formed. The final shaped bhaji prior to cooking should resemble a ball quite smooth and feel quite heavy. Though it is very important not to over work the onion.
More importantly, the bhaji seems to be holding alot of residual oil. This I found, is due to one of two possible things or a mix of both. Firstly, if the bhaji is cooked on too lower a heat, the batter does not seal properly and then soaks up alot of oil. Secondly, old oil can have a similar effect despite being to temperature. What is characteristic of both and this is the important bit, is that a loss of flavour will be noted.
Finally, to me the bhaji in the picture is over cooked. It could be that you have compensated for the points I have raised about the wrong temperature or old oil. Again this has the effect of reducing the final flavour as any spicing is cooked out. As you have noticed, there is a very fine balance of spicing in this recipe.
The only other thing that is vital to this recipe being cooked properly, is the consistency of the batter and ratio of batter to onion. I can not stress enough how sticky the batter should be and in ratio to onion, be just enough to hold the bhaji together.
Please don't think I am trying to teach you suck eggs, I only bring these points to note as I have been there before and know from experience how not to cook a bhaji.
If you persevere with this recipe and more importantly the method of the recipe, I know you will be very pleased with the finished goal, once you reach it.