Calling u_cleanup() should clean up any OS level mutexes used by the ICU library in addition to the heap memory that it already handles.
Failure to clean up OS level mutexes could be an issue for any process that repeatedly DLL loads and unloads ICU. Any such process must already call u_cleanup() to avoid memory leaks, meaning that nothing new would be required on the application side.
A brief history:
ICU 63 and earlier, mutexes leak on library unloading.
ICU 64 mutexes do not leak, but there are order-of-destruction problems.