Techniques such as using monads (e.g., the IO monad in Haskell) or other constructs like ZIO in Scala can help manage side effects in a controlled and composable manner, allowing developers to write code that is both functional and practical for real-world applications.