First, you need to connect your Arduino to your home LAN in some way. There are a number of ways to do this. Where is the relay that is being controlled in relation to your network? Do you need a wireless connection to your LAN, or can you reach the Arduino with an ethernet cable?
Second, you need to set up port forwarding on your router. This basically means that when outside your LAN, you connect to your public IP address on your router, connecting on a port that has been configured to connect ("forward") to the LAN IP address and port number of your Arduino. Does that make sense? If not, google "port forwarding" and have a read.
Third, you need to write a program for your Arduino so that a) it can control the relay, and b) it can communicate via the network with an incoming connection (from your smartphone). Probably the most common thing is to set up your Arduino to act as a simple web server, which can report status and take control commands, and connect to it via a web browser on your phone.
So that's the outline. It has been done many times before. The main variations are what hardware you use to connect your Arduino to your LAN, and the specifics of how you write your Arduino program to perform the functions you require.
Yep, that is all good. I am implementing a home automation system using Arduino ethernet to publish a simple web site and allowing the various automation functions to be activated by html links on the various web pages.
One of the activities that is implemented on the web site is to fire a relay that opens my garage door. Now when my wife locks herself out of the house she can use her mobile phone to open the garage. Or she can ring me and I will do it from my work place.
If you need some help addressing specific functions you can ask me and I will try to post the relevant code snippets from my application.