There is a way to simulate water pathing without no-fly zones, but it's not perfect and requires giving up the use of cliffs for land terrain, which means you can't use any cliff-jumpers as land units unless you change them to regular ground movement. It's also prone to bouts of idiocy and occasional glitches if you have any water-only units (which is almost certain), but properly moving your units deals with that problem as long as the terrain design isn't too ridiculous. Still, this is the best solution I've been able to find, and it's used in two of my maps. It's an acceptable workaround, as long as you're willing to invest the (substantial) time required to set it all up properly and make a few sacrifices.
You need to make your naval units move like Colossi, to start with (give them the proper mover), so that they can scale cliffs. Use the highest cliff level for any solid land, and the base cliff level (two levels lower) for deep water. For any landing zones on your islands (any points where you want transports to be able to unload units), use the intermediate cliff level to carve out an appropriate site. Make a ramp to the upper level (so units can get up to solid land), but not to the lower level (so units don't walk out into the deep water). For the general coastline, this is sufficient; the Colossi mover can only scale a single cliff level at a time, not two.
For the landing zones, this is where it gets more time-consuming. You need invisible blockers at the top of every ramp up (hide them with a trigger if you must), set to collide with the naval ships and nothing else (pick an unused land flag of your choice). Using structures is fine as long as you set the collision appropriately, but it is extremely important that you not use footprints in the final release (using footprints to place them neatly is fine); any pathing footprint being active means that collision flags are ignored. You must also paint no-ground pathing manually along the cliff edges leading up to land at these sites (the general coastline doesn't require it), to keep the naval units from going up onto land; this is extremely tedious, especially since you'll have to redo the pathing and move the blockers any time you change how a landing site is set up, but it's also necessary for the system to work properly.
To get the naval units to hit the proper height, I use the Ignore Terrain Height flag on units, and set their UI height such that they're half-submerged in the water level I set (which is just above the middle cliff level, to create the impression of shallow water). As long as landing sites have level terrain, this works fine, although any naval units that slip past the blockers can easily vanish into the ground. To minimize the risks of naval units bypassing the blockers, make sure any naval spawning or construction is kept away from the cliff edges (use oversized footprints that only block pathing in the interior pieces, if necessary).
Dealing with drowning is an exercise to do yourself, although I personally use a globally applied behavior that is only applied to non-naval units on the appropriate cliff level (courtesy of a validator) which does damage over time. Dealing with naval units that occasionally get past the blockers and are trapped on land is likewise something to be dealt with at your own discretion, although using a similar behavior that is limited to naval units on the top cliff level (and properly placed blockers that aren't too high up the ramp) might do the trick.
That's how I simulated naval pathing. It's hardly ideal (naval units will try to run up ramps if they think that's the shortest path, so you have to route them around manually), but it works well enough to be used and there isn't anything better coming.