с получением ClientID всё верно — ym(XXXXXX, 'getClientID', cb) в скрытое поле формы, штатный способ. Загвоздка дальше не в Метрике, а в RaceFacer: уточни у их поддержки, примет ли CRM произвольное поле формы — если нет, понадобится её API/вебхук, чтобы ym_client_id долетел до карточки лида.
И в Директ это поле напрямую не суют. Полученный ClientID грузишь в Метрику как офлайн-конверсию (Management API, метод offline_conversions/upload: ClientId + цель + время) — под неё заранее нужна JS-цель. Директ подхватит конверсию сам, если кампания завязана на эту цель, отдельно в Директ ничего слать не надо.