Complexity can be justifiable if it generates value that cannot be gained otherwise - e.g. if it abstracts or simplifies a behavior/functionality to your end user (which may also be another developer) and/or if it somehow can make him/her more productive.
It obviously affects the management of a codebase/infrastructure, so to embrace it you must have clear what are the benefits to your users/developers and that they are worth the burden. If not, you better stay away from it. ;)