I'm a bit busy at the moment. I'll write a detailed post later on. In nut shell here is what I've done (I'm using KDE).
Modify the /usr/lib/systemd/system/bluetooth.service as below:
ExecStart=/usr/libexec/bluetooth/bluetoothd -n -C -P sap # -P sap is only needed when the mobile device don't have sim card; for a mobile device with sim card remove -P sap
ExecStartPost=/usr/bin/sdptool add NAP
# systemctl daemon-reload
# systemctl restart bluetooth.service
Create a bridge (say br0) with brctl or ip command and make the physical LAN interface (say eno1) slave of the bridge br0. Please note that eno1 is the physical interface having internet connectivity. Flush the ip address(s) assigned to eno1; bring up the bridge and get/assign an ip address (e.g. with dhclient or nmcli or whatever tool you use).
Install dnsmasq dhcp server and configure it in such a way that it leases the ip addresses via the bridge interface br0. (Say the bridge has ip address 192.168.1.1/24, then the dnsmasq should provide the ip addresses say 192.168.1.2-192.168.1.10(or whatever range is suitable for you).
Run the command
bt-network -d -s nap br0 &
Connect the mobile device with your fedora box via bluetooth; (remember to trust the mobile device).
With mobile device connected to fedora box; go to bluetooth connection settings on the mobile device and check the box before "enable internet access".
If everything works fine; you should see a new interface on both fedora box (named bnep0) and mobile device (named bt-pan). The bt-pan should have the ip address provided by the dnsmasq server and you should have the internet connectivity on the mobile device.