It does not know how to find the exact value. If we switch the order of integration, it can:
I used Reduce[]
because I'm lazy and I've already got Mathematica up and running:
Reduce[0 < y < 1 && y < x < 1/y, {x, y}]
(*
(0 < x <= 1 && 0 < y < x) || (x > 1 && 0 < y < 1/x)
*)
Integrate[(y^3/x) E^(y^2 (x^2 + x^(-2))), {y, 0, x},
Assumptions -> 0 < x < 1]
res1 = Integrate[%, {x, 0, 1}]
(*
(x^3 + E^(1 + x^4) x^7)/(2 (1 + x^4)^2)
1/16 (-1 + E)^2
*)
Integrate[(y^3/x) E^(y^2 (x^2 + x^(-2))), {y, 0, 1/x},
Assumptions -> x > 1]
res2 = Integrate[%, {x, 1, Infinity}]
(*
(E^(1 + 1/x^4) + x^4)/(2 x (1 + x^4)^2)
1/16 (-1 + E)^2
*)
res1 + res2
(*
1/8 (-1 + E)^2
*)
Numerical verification:
res1 + res2 // N
NIntegrate[(y^3/x) E^(y^2 (x^2 + x^(-2))), {y, 0, 1}, {x, y, 1/y}]
(*
0.369062
0.369062
*)