Because vanilla OCaml doesn't have any mechanism for expressing compile-time computations, the same level of transformations aren't possible, but I wouldn't call this a limitation of the type-system, rather the meta-programming capabilities.
Although, you can somewhat approximate it with modules and functors:
module type M = sig type t val t: t end
let my_type (type a) (v: a) : (module M) =
let module M = struct
type t = a
let t = v
end in
(module M : M)
module T1 = (val my_type 123)
type t1 = T1.t
let val1 : t1 = T1.t
module T2 = (val my_type val1)
type t2 = T2.t