Use get_template_directory_uri()
:
$url = get_template_directory_uri() . '/images/myimage.jpg';
This function will always return the correct path to your theme.
If you want to hide/shorten that URL, you could use an endpoint, maybe img
. The downside is, you load the complete WordPress for each image request.
Or use mod_rewrite:
RewriteRule ^img/([a-z\d-])\.png /wp-content/themes/my_theme/img/$1.png [L]
This will not work in a standalone theme.