New way
The OP mentioned ContourPlot but its behavior is V10 makes my original solution practically unusable except for a very rough plot. Another approach is to solve the equation for all the roots in a given region. From the ContourPlot, one can see there are two types, ones that cross y == -5 and ones that cross y == 5. We can use NDSolve to solve the equation by first differentiating it (ode) and then integrating it (sols[y0]) using the intersections with the two planes as initial conditions (ics[y0]). This approach gives us one of the solutions twice, but we can delete by comparing values of x[y] at y == -5. This approach is much quicker and produces nice, differentiable, and accurate solutions.
eqn = x^2 + Sin[x y] == 0
ode = D[eqn /. x -> x[y], y]
(*
x^2 + Sin[x y] == 0
2 x[y] Derivative[1][x][y] + Cos[y x[y]] (x[y] + y Derivative[1][x][y]) == 0
*)
xmin = -5 - 5 I;
xmax = 5 + 5 I;
ymin = -5;
ymax = 5;
ics[y0_] := NSolve[eqn && Re[xmin] <= Re[x] <= Re[xmax] &&
Im[xmin] <= Im[x] <= Im[xmax] /. y -> y0, x];
Clear[sols];
sols[y0_] := sols[y0] = Quiet[
First@NDSolve[{ode, x[y0] == (x /. #),
WhenEvent[Re@x[y] < Re[xmin], "StopIntegration"],
WhenEvent[Re@x[y] > Re[xmax], "StopIntegration"],
WhenEvent[Im@x[y] < Im[xmin], "StopIntegration"],
WhenEvent[Im@x[y] > Im[xmax], "StopIntegration"]},
x, {y, ymin, ymax}] & /@ ics[y0],
NDSolve::ndsz]
tolerance = 8;
mysols = DeleteDuplicates[Join[sols[ymin], sols[ymax]],
Quiet[SetPrecision[x[ymin] /. #1, tolerance] ==
SetPrecision[x[ymin] /. #2, tolerance]] &];
Show[
ParametricPlot3D[{y, Re@x[y], Im@x[y]} /. #,
Evaluate@Flatten[{y, x["Domain"] /. #}]] & /@ mysols,
PlotRange -> All, AxesLabel -> {y, Re[x], Im[x]}
]

Note that tolerance is used to determine how equal (up to what precision) two initial conditions have to be for them to be considered the same. In this case, they're identical, but I wanted to show a more robust solution.
Note also that as far as robustness goes, we made some assumptions about where the initial points on the solutions could be found.
Original answer (ContourPlot)
Something like this, perhaps? It's too slow for Manipulate, though.
plot = ContourPlot3D[
{0 == Re[(x1 + I x2)^2 + Sin[(x1 + I x2) y]],
0 == Im[(x1 + I x2)^2 + Sin[(x1 + I x2) y]]},
{y, -5, 5}, {x1, -5, 5}, {x2, -5, 5},
ContourStyle -> None, Mesh -> None, MaxRecursion -> 2,
BoundaryStyle -> {1 -> None, 2 -> None, {1, 2} -> {{Lighter@Blue, Thick}}},
AxesLabel -> Automatic]

The BoundaryStyle trick is from this answer by Daniel Lichtblau.
Also, it seems faster in V9 than V10 (< 80 sec. vs. > 1629 sec. with MaxRecursion -> 1).
The parts of the coordinates corresponding to {Re[x], y} are {2, 1}. One can project the coordinates and ancillary options of Graphics3D to Graphics with the following.
With[{parts = {2, 1}},
plot /.
{GraphicsComplex[pts_, stuff__] :> GraphicsComplex[pts[[All, parts]], stuff],
Graphics3D -> Graphics,
HoldPattern[PlotRange -> pr_] :> (PlotRange -> pr[[parts]]),
HoldPattern[AxesLabel -> label_] :> (AxesLabel -> label[[parts]])}
]

To get {Im[x], y}, use parts = {3, 1}.
Solve,FindRoot? Post the code you have written so far. – Sektor Apr 14 '15 at 19:49x = x1 + I * x2and solve for realx1andx2. Of course, very soon you will have too many dimensions to plot on a flat computer screen :-) If you can obtain an analytical solution, try usingPlot3Dwithyas a function ofx1andx2. – LLlAMnYP Apr 14 '15 at 20:45