(nRF51 SDK v12.3.0)
The function gcm_init() in gatt_cache_manager.c (BLE Peer Manager Lib) calls ble_conn_state_user_flag_acquire() part of the BLE Connection State Lib in order to use User Flags.
If BLE is disabled and enabled again (one second time), and peer_manager is initialized once more, then, NRF_ERROR_INTERNAL is returned by gcm_init().
It happens that, on that second time, all user flags are already acquired. Therefore, it seems that one has to call ble_conn_state_init() -which has nothing to do with peer_manager- to reset all user flags.
This dependency -if confirmed by Nordic- does not show a clean architecture.