Because your ISP blocks inbound on 21? Your router must of be of a very limited feature set to not allow forwarding external port X to internal port Y. This is very common feature of even very basic native firmware of soho routers.
Not running on standard ftp port can bring its own set of problems - most nat soho routers again even the most basic have a "ftp helper" This sees traffic on 21 (knowing its ftp) listens for port and pasv command and makes adjustments to allow ftp to function. FTP over nat is just well PITA most of the time.
With the nature of ftp having control and data channels and then either active or passive modes of connecting the data channel. NAT can cause some problems. The ftp helper can change the IP in the port or pasv command to tell the other side the actual public IP vs the private being sent by either the client or the server -- these ftp helpers are useful on both the client and server side when nat involved on both sides (which is very common these days)
The ftp helper also sees the ports given in the command and will allow the return traffic without having to have a specific rule set.
When you run either ftp on non standard port or when using ftps where the control channel is encrypted you can break these helpers and cause more issues with getting ftp to work then just a security concern of running it on the standard ports. If you are not trying to circumvent a isp block of 21, keep in mind that security through obscurity is not security
My first suggestion when users have issues with ftp is to ask why are you still using such a deprecated protocol in the first place that is PITA using nat if you don't have a decent understanding of both NAT in general and how the ftp protocol functions in detail.. Anyone wanting to use ftp should really understand the concepts of the control and data channels and how active passsive come into play.. This is a great write up http://slacksite.com/other/ftp.html
If you have your heart set on using ftp, please be aware of the security issues - username and passwords are sent in clear for starters. And sure opening to the public net will mean you noise and bot attempts to access it, be it on the standard port or not. Nonstandard just lowers the overall noise level in your logs
But I would really look to other methods of providing access to files. There are plenty of ways to skin that cat, you could use ftp but over vpn, this keeps access off the public net. Or even over a ssh tunnel. Or if your going to have ssh tunnel - might as well just use sftp.
There are plenty of http/https interfaces to allow for file transfer - This normally removes the issue of control and data channels over nat, etc. If just looking to share some files with friends and family there are plenty of services like dropbox, skydrive, sugersync, box, etc. etc. That allow both for sharing of files with known users or with public serving of files, etc.
Other advice I would give to anyone wanting to use ftp, be it they are serving and need something to test access with or just accessing one as user, is to use an actual CLIENT to do it and not a browser or file explorer built into your OS. Browsers work ok when its just anon access and no issues with NAT, etc and your your just downloading a file now and then. Uploading support is limited at best, active/passive rarely able to change easy. Never any actual details of the commands being sent or received - and quite often if you need to actually log in, especially over a proxy -- well just forget it.
Normally there is a command line client that could be used, but many users have issues with cmdline tools so find a actual ftp client that you like. There are many free ones out there - filezilla has lots of support and users and great feature set like over a proxy, ftps support - easy to set active or passive, etc. etc. And very simple to understand gui when actually connected to the ftp. With ability to show the actual ftp commands that are going on in the background that even if over the head of the user - can be very helpful to someone helping them troubleshoot their issues.