Make curry roux: In a small saucepan, heat 2 tablespoons olive oil over medium heat. Add flour gradually, whisking to combine. Continue cooking, whisking constantly, until golden and fragrant, 1 to 2 minutes. Stir in spices and cook, stirring, until very fragrant, 30 seconds to 1 minute. (Mixture should be texture of wet sand.) Carefully transfer to a small bowl while you prepare vegetables.
Sauté mushrooms: In a large skillet over medium heat, heat 1 tablespoon olive oil. Add mushrooms and arrange in a single layer, cut side down. Cook undisturbed until cut sides are golden, about 4 minutes. Stir, season with salt, and cook 3 to 4 minutes more. Remove from heat.
Cut onion in half root to tip then cut each half into 4 thick slices, removing tip and root. Heat remaining tablespoon olive oil in a large pot over medium heat. Add onion, season with salt, and cook, stirring occasionally, until onions have softened slightly and are turning golden at edges, 4 minutes. Add ginger and cook until fragrant, 1 minute more.
To onions, add broth and a big pinch of salt. Bring to a boil, scraping up any brown bits with a wooden spoon. Reduce heat to a simmer. Transfer about 1/2 cup cooking liquid to a small bowl and whisk in about a quarter of the curry roux. Return mixture to pot and stir to combine. Repeat 3 more times until all of the roux is dissolved into the pot. Add potato and simmer, partially covered, about 5 minutes.
Add carrots and half the grated apple. (The vegetables should just be covered with liquid; add more water as necessary.) Return to a simmer and cook, partially covered, until carrots and potatoes are just tender, 8 to 10 minutes.
Stir in cooked mushrooms, tomatoes, and remaining apple then season to taste with soy sauce.