You can get the option details from Magento\Catalog\Helper\Product\Configuration.
By default, you will get title values under getCustomOptions(). Instead of getting direct options details, you can pass the product with selected customOptions Items, so you can easily get the title.
public function getCustomOptions(\Magento\Catalog\Model\Product\Configuration\Item\ItemInterface $item) {
$product = $item->getProduct();
$options = [];
$optionIds = $item->getOptionByCode('option_ids');
if ($optionIds) {
$options = [];
foreach (explode(',', $optionIds->getValue()) as $optionId) {
$option = $product->getOptionById($optionId);
if ($option) {
$itemOption = $item->getOptionByCode('option_' . $option->getId());
/** @var $group \Magento\Catalog\Model\Product\Option\Type\DefaultType */
$group = $option->groupFactory($option->getType())
->setOption($option)
->setConfigurationItem($item)
->setConfigurationItemOption($itemOption);
if ('file' == $option->getType()) {
$downloadParams = $item->getFileDownloadParams();
if ($downloadParams) {
$url = $downloadParams->getUrl();
if ($url) {
$group->setCustomOptionDownloadUrl($url);
}
$urlParams = $downloadParams->getUrlParams();
if ($urlParams) {
$group->setCustomOptionUrlParams($urlParams);
}
}
}
$options[] = [
'label' => $option->getTitle(),
'value' => $group->getFormattedOptionValue($itemOption->getValue()),
'option_id' => $option->getId(),
'option_type' => $option->getType(),
'option_type_id' => $itemOption->getValue(),
'custom_view' => $group->isCustomizedView(),
];
}
}
}