One thing that makes a huge difference is fresh spices. Even if the spices themselves aren't super fresh, if you buy whole spices they degrade much slower than pre ground. A cheap coffee grinder is super handy for this. They are also cheaper. I have a bag of garam masala mix and I just grind what I need each time.
If you are comparing to restaurant food you might not be using as much fat and salt as they do. Personally I don't cook with oil but common practice is to fry the spices and aromatics a bit to help release their flavours.
Fresh onion and ginger also makes a big difference I find, and lots of it. When I make a tomato gravy I process the onion and ginger together in the food processor for the base.