I would change the line
RewriteCond %{REQUEST_URI} !^/subdirectory/
to
RewriteCond %{REQUEST_URI} !^/subdirectory/?
so that the trailing / is optional. The code, with the -f and -d checks, will not trigger if you happen to give an existing file or directory. Assuming not,
RewriteRule ^(.*)$ /subdirectory/$1
should silently send visitors to the subdirectory (inserts /subdirectory before the existing URI).
I'm not sure why the last two lines are in there. They may be handled already if you take the trailing / requirement off (as mentioned above). Try commenting them out (with # ).
If it still doesn't work, there may be something different with GoDaddy's setup. You should discuss what you're trying to do with their tech support.
Update: modified version of your latest .htaccess
Options +FollowSymLinks -Multiviews
<IfModule mod_rewrite.c>
# BlueHost.com
# .htaccess main domain to subdirectory redirect
# Do not change this line.
RewriteEngine on
# Change example.com to be your main domain.
RewriteCond %{HTTP_HOST} ^(www\.)?grampianyoga\.org\.uk$
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteCond %{REQUEST_URI} !^/gya2
RewriteRule ^(.*)$ /gya2/$1 [L]
</IfModule>
The RewriteCond %{HTTP_HOST} ^(www\.)?grampianyoga\.org\.uk$
line is probably unnecessary (but harmless), unless you're working with parked domains, subdomains, add-on domains, etc.