In a large Dutch oven over medium-high, heat the oil until barely smoking.
Add the onion and cook, stirring occasionally, until lightly browned, 5 to 7 minutes.
Add the ginger and garlic, then cook, stirring, until fragrant, about 1 minute.
Add the tomato paste and cook, stirring, until well browned and beginning to stick to the pot, about 1 minute.
Stir in the chili-garlic sauce, then add the lemon grass, star anise, cinnamon and beef, then stir to coat.
Add the coconut water and broth.
Bring to a boil over medium-high, then reduce to medium-low and cook, uncovered and without stirring, for about 4 minutes, adjusting the heat as needed to maintain a simmer.
Using a wide spoon, skim off and discard the scum from the surface of the liquid. Reduce to medium-low, cover and cook, adjusting the heat as needed to maintain a simmer, until a skewer inserted into the beef meets no resistance, 2 to 2½ hours.
Remove the pot from the heat.
Remove and discard the lemon grass, star anise, cinnamon and ginger.
Tilt the pot to pool the cooking liquid to one side, then use the wide spoon to skim off and discard as much fat as possible from the surface.
Stir the carrots into the stew and return to a simmer over medium.
Cover and cook, stirring occasionally and adjusting the heat as needed to maintain a simmer, until the carrots are tender, about 15 minutes.
Remove the pot from the heat. Stir in the fish sauce and lime juice.
Taste and season with additional chili-garlic sauce (if desired), salt and pepper. Ladle the stew into bowls and top with sliced onion and cilantro and/or basil. Serve with lime wedges.